# SPÉCIFICATIONS FONCTIONNELLES & ARCHITECTURE
## Application de Gestion de Boulangerie
**Technologies cibles :** PHP Natif (sans architecture MVC), MySQL/InnoDB.
### I. SPÉCIFICATIONS FONCTIONNELLES
#### 1. Configuration Générale du Système
Module réservé à l'**Administrateur** et au **Gérant** pour paramétrer les règles tarifaires globales et les informations institutionnelles :
 * **Informations de la Société :** Raison sociale, adresse, téléphone(s), NIF/IFU, RCCM, logo, message de pied de page sur les tickets POS.
 * **Paramètres de Vente & Ristournes Grossistes :**
   * **Prix de vente du pain pour les Grossistes :** Tarif unitaire du pain appliqué par défaut à tous les clients grossistes lors des ventes POS.
   * **Prix de la ristourne Grossiste :** Montant de la ristourne accordé par unité de pain vendue aux clients grossistes (utilisé pour le calcul périodique des ristournes).
#### 2. Gestion des Utilisateurs et Droits d'Accès
 * **Administrateur :** Accès intégral à tous les modules, y compris la configuration de la société, les paramètres système (prix grossiste et ristourne) et la gestion des comptes utilisateurs.
 * **Gérant :** Accès aux modules de supervision (arrêt de caisse, remboursements, versements bancaires, rapports mensuels, gestion du personnel, configuration des dépenses, ajustement du prix grossiste/ristourne).
 * **Caissier :** Accès limité aux opérations courantes de sa session active (POS, saisie de la production, enregistrement des dépenses, octroi d'avances sur salaire, création rapide de clients grossistes).
#### 3. Gestion des Articles
Classification stricte des articles selon trois types d'usage :
 * **Matières premières :** Destinées uniquement à la fabrication (farine, levure, améliorant, sucre, etc.).
 * **Produits finis :** Résultats du processus de production (différents types de pains, viennoiseries).
 * **Articles d'achat/revente :** Produits achetés aux fournisseurs et revendus directement sans transformation (boissons, beurre, confiture, etc.).
#### 4. Gestion des Clients
Trois catégories distinctes :
 * **Détail :** Tarif du pain défini individuellement lors de la création de la fiche client (ou tarif par défaut).
 * **Grossiste :** Attribution automatique d'un numéro de carnet incrémenté. Tarif du pain défini globalement dans la Configuration Générale du Système.
 * **Livreur :** Tarif du pain attribué lors de la création de la fiche client.
 * **Règle POS :** Le caissier a le droit de créer un client *Grossiste* directement sur l'interface de vente, mais ne peut pas créer d'autres types de clients.
#### 5. Gestion du Personnel et Avances
 * Fiche d'enregistrement des informations administratives des employés.
 * Possibilité pour un employé de solliciter une avance sur salaire ou un crédit auprès du caissier durant une session de caisse ouverte.
 * Le règlement final du crédit ou l'apurement en fin de mois (ou à la période voulue) est effectué exclusivement auprès du gérant.
#### 6. Gestion des Stocks (Entrées / Sorties hors vente)
 * **Entrées :** Réception de marchandises suite à une commande fournisseur.
 * **Sorties non liées à la vente :** Traçabilité des pertes et prélèvements (rations alimentaires accordées aux employés, pains cassés, pains secs/invendus).
#### 7. Gestion de la Production
 * Saisie par le caissier de la fiche de production transmise par le maître boulanger.
 * Sélection des matières premières consommées et des produits finis obtenus.
 * Le stock des matières premières est automatiquement déduit lors de la validation de la production.
#### 8. Gestion de la Caisse et POS (Point de Vente)
 * **Logique de prix au POS :**
Les différents mode de paiement ( espece , mobile , compte client(represente les vente a credit qui concerne uniquement les client details / crossiste)
   * *Pain :* Application du prix selon la catégorie du client (Détail = prix fiche client ; Grossiste = Prix de vente grossiste configuré dans le système ; Livreur = prix fiche client).
   * *Autres produits (achat/revente) :* Application du prix de vente standard défini sur la fiche de l'article.
   * *Gestion de stock du pain :* Le stock de pain n'est pas décrémenté lors des ventes POS.
 * **Dépenses de session :** Le caissier saisit les dépenses courantes (selon les catégories créées par le gérant) et octroie les avances au personnel.
 * **Double clôture de caisse :**
   * *Clôture partielle (Caissier) :* Comptage et déclaration des sous physiques en caisse à la fin du poste. La session passe en attente de validation.
   * *Clôture globale (Gérant) :* Billetage physique, déduction des dépenses/avances, calcul automatique et enregistrement des écarts (surplus ou manquants). La session passe au statut fermée.
#### 9. Gestion des Versements Bancaires
 * Saisie et suivi par le gérant des dépôts de fonds de la boulangerie vers les comptes bancaires.
#### 10. Gestion des Remboursements
 * Enregistrement par le gérant des remboursements de créances effectués par les clients ou le personnel.
#### 11. Gestion des Rapports
 * Génération à la fin du mois (ou sur une période personnalisée) du rapport mensuel d'activité par le gérant (chiffre d'affaires, dépenses, production, écarts de caisse, état des stocks).
#### 12. Gestion des Ristournes Commerciales
Calculées exclusivement sur les ventes de pain pour une période sélectionnée par l'utilisateur :
 * **Grossistes :** Calcul basé sur le tarif unitaire de ristourne configuré dans les paramètres généraux du système (\text{Ristourne} = \text{Quantité de pain vendue} \times \text{Prix ristourne grossiste du système}).
 * **Livreurs :** Calcul basé sur le tarif unitaire de ristourne saisi sur la fiche de chaque client livreur (\text{Ristourne} = \text{Quantité de pain vendue} \times \text{Prix ristourne fiche livreur}).





### II. ARCHITECTURE DU PROJET & ARBORESCENCE DE FICHIERS



boulangerie/
│
├── config.php                        # Connexion PDO, variables globales (devise) et gestion des sessions/rôles
├── header.php                        # En-tête HTML + barre de navigation dynamique selon le rôle
├── footer.php                        # Pied de page HTML + scripts JS communs
│
├── index.php                         # Page de connexion (Login)
├── dashboard.php                     # Tableau de bord principal (Redirection selon le rôle)
├── logout.php                        # Déconnexion
│
├── modules/
│   ├── societe/
│   │   └── index.php                 # Consultation et mise à jour des informations de la boulangerie
│   │
│   ├── configuration/
│   │   └── index.php                 # Modification du prix du pain grossiste et du taux de ristourne
│   │
│   ├── utilisateurs/
│   │   ├── index.php                 # Liste des utilisateurs
│   │   ├── ajouter.php               # Formulaire de création d'un utilisateur
│   │   └── modifier.php              # Modification d'un compte (rôle, mot de passe)
│   │
│   ├── articles/
│   │   ├── index.php                 # Liste des articles (Matières 1ères, Finis, Achat/Revente)
│   │   ├── ajouter.php               # Création d'un article
│   │   └── modifier.php              # Modification d'un article
│   │
│   ├── clients/
│   │   ├── index.php                 # Liste des clients (Détail, Grossiste avec carnet, Livreur)
│   │   ├── ajouter.php               # Création standard d'un client
│   │   └── modifier.php              # Modification des informations et prix appliqués
│   │
│   ├── personnel/
│   │   ├── index.php                 # Registre des employés
│   │   ├── ajouter.php               # Enregistrement d'un employé
│   │   └── modifier.php              # Modification des informations d'un employé
│   │
│   ├── stock/
│   │   ├── index.php                 # Historique des mouvements de stock
│   │   ├── entree.php                # Réception de marchandises (commande fournisseur)
│   │   └── sortie.php                # Sorties hors vente (Rations, pain cassé, pain sec)
│   │
│   ├── production/
│   │   ├── index.php                 # Historique des fournées
│   │   └── nouvelle.php              # Saisie d'une production (Choix MP déduites + Produits finis obtenus)
│   │
│   ├── pos/
│   │   ├── index.php                 # Interface de vente POS (Panier JS + sélection du client)
│   │   ├── client_grossiste_ajax.php # Modal d'ajout rapide d'un client grossiste en caisse
│   │   └── ticket.php                # Format d'impression du ticket de caisse
│   │
│   ├── caisse/
│   │   ├── depenses.php              # Saisie des dépenses de session par le caissier
│   │   ├── avances.php               # Octroi d'avances sur salaire au personnel par le caissier
│   │   ├── cloture_partielle.php     # [CAISSIER] Déclaration des sous en caisse (Statut -> attente_validation)
│   │   ├── cloture_globale.php       # [GÉRANT] Billetage, calcul des écarts (Statut -> fermee)
│   │   └── categories.php            # Gestion des catégories de dépenses (Ajout / Modification)
│   │
│   ├── remboursements/
│   │   ├── index.php                 # Historique des remboursements
│   │   ├── client.php                # Encaissement des créances clients par le gérant
│   │   └── personnel.php             # Apurement des avances du personnel par le gérant
│   │
│   ├── versements/
│   │   ├── index.php                 # Historique des versements bancaires
│   │   └── ajouter.php               # Saisie d'un dépôt en banque par le gérant
│   │
│   ├── ristournes/
│   │   └── index.php                 # Calcul et édition des ristournes par période (Grossistes & Livreurs)
│   │
│   └── rapports/
│       ├── mensuel.php               # Génération du rapport mensuel d'activité
│       └── imprimer.php              # Vue optimisée pour l'impression du rapport

