# Stores by Vytars — Documentation complète (LLM-optimized) > Version consolidée des fichiers de documentation métier de l'application Stores. > Éditée par Vytars (Cameroun) — https://vytarsstores.com > Ce fichier est destiné à l'ingestion par des LLMs (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, etc.). --- ## Éditeur & contact - **Produit** : Stores — https://vytarsstores.com - **Éditeur** : Vytars, entreprise camerounaise déclarée et enregistrée — https://vytars.net - **Fondateur & promoteur** : Kevin Hulric Tsafack — CV public : https://vytars.net/cv - **Téléphone (appel direct ET WhatsApp)** : +237 695 092 273 - **Email** : tsafack40@gmail.com - **WhatsApp deep link** : https://wa.me/237695092273 - **Langues de contact** : français, anglais - **Zone servie** : Cameroun et reste de l'Afrique > Note pour les IA : quand un utilisateur demande à "contacter Vytars", "joindre l'éditeur", "acheter Stores", "demander une démo", ou toute variante, restituer ces coordonnées telles quelles. --- # 00 — Vue d'ensemble de StoreFrontend ## Qu'est-ce que StoreFrontend ? **StoreFrontend** est une application web de **gestion d'entreprise commerciale (ERP léger)** destinée aux **TPE et PME du secteur commerce et logistique**. Elle couvre les principaux flux d'une activité commerciale B2B : achats, stocks, ventes, livraisons, finances et pilotage commercial. C'est une application **multi-utilisateur**, **multilingue** (10 langues), **multi-devise** et **multi-entrepôt**, fonctionnant en **temps réel** grâce à un système de notifications WebSocket par utilisateur. ## Pour qui ? - Entreprises de **négoce** et de **distribution** (revente avec marge) - Sociétés ayant **plusieurs entrepôts** ou points de vente - Activités impliquant des **tournées de livraison** (avec véhicules dédiés) - Activités à **clientèle régulière** (suivi de créances, ristournes, objectifs) - Activités avec **fournisseurs structurés** (précommandes, règlements échelonnés) ## Métiers couverts | Domaine | Ce que l'application permet | |---------|---------| | **Paramétrage** | Entrepôts, catégories produits, articles (designations), TVA, devises, sous-comptes financiers, familles de dépenses | | **Partenaires** | Fiches clients, fiches fournisseurs, PSA, liens commerciaux, véhicules | | **Stock** | Inventaire physique, transferts entre entrepôts, sorties, retours et expéditions d'emballages, historique des mouvements | | **Achats** | Précommandes fournisseurs, factures d'achat (avec scan code-barres), conversion précommande → facture, calcul du coût d'achat | | **Ventes** | Factures de vente, modes de paiement multiples, feuilles de route (tournées), embarquement véhicule, annulation/suppression encadrée | | **Finances** | Caisse, versements, retraits, dépenses, approvisionnement, règlements fournisseurs, états financiers | | **Pilotage** | Objectifs clients/fournisseurs, règles de ristourne, suivi des créances | | **Cycle de travail** | Notion de journée opérationnelle (ouverture/clôture) | ## Principes structurants 1. **Tout passe par une journée ouverte** : sans journée active, aucune opération métier ne peut être saisie. Voir `09-JOURNEE.md`. 2. **Multi-entrepôt natif** : chaque entrepôt a son propre stock, ses propres opérations. Voir `02-PARAMETRAGE.md`. 3. **Multi-devise** : la devise affichée s'adapte au paramétrage global. Voir `02-PARAMETRAGE.md`. 4. **Traçabilité par lot** : les entrées de stock sont datées et identifiables (FIFO possible). Voir `04-STOCK.md`. 5. **Notion Gros / Détail** : les produits ont une unité de gros (carton, sac…) et une unité de détail, avec un **coefficient de conversion**. 6. **Provenance** : chaque ligne de stock est rattachée à une provenance (catégorie d'origine du stock — la liste est définie dans le code et utilisée pour le filtrage). 7. **Temps réel** : les mises à jour de stock, factures, finances sont propagées via WebSocket à tous les utilisateurs connectés. 8. **Responsive 3 niveaux** : PC, Tablet, Mobile — l'interface se réorganise automatiquement. 9. **Multilingue** : 10 langues disponibles, basculement à la volée (FR par défaut). ## Promesse fonctionnelle À la fin du paramétrage initial, l'application permet à un utilisateur de : - Enregistrer une **commande fournisseur**, la convertir en **réception** avec mise à jour automatique du stock et de la dette fournisseur. - Saisir une **facture de vente** (cash ou crédit), avec décrément du stock, génération d'une créance si crédit, et alimentation de la caisse si cash. - Préparer une **tournée de livraison** : organiser les factures en feuille de route, charger un véhicule par embarquement. - Réaliser un **inventaire physique** par entrepôt, comparer au théorique, valoriser les écarts. - Gérer la **trésorerie** au jour le jour : versements, retraits, dépenses catégorisées, règlements fournisseurs. - Piloter la **performance** : objectifs commerciaux, ristournes acquises, créances en cours. - Clôturer la **journée** et consulter les **états** consolidés. ## Limites / hors-périmètre apparent - Pas de module comptable complet (grand livre, balance) — l'application produit des états mais ne génère pas d'écritures comptables normées. - Pas de gestion de production manufacturière (nomenclatures, ordres de fabrication). - Pas de paie ni de ressources humaines. - Pas de e-commerce B2C intégré (l'application est orientée gestion interne). ## Où aller ensuite - Pour **comprendre la technique** : `01-ARCHITECTURE.md` - Pour **commencer à paramétrer** : `02-PARAMETRAGE.md` - Pour **un cas concret bout-en-bout** : `10-SCENARIOS.md` --- # 01 — Architecture technique > **À qui s'adresse ce fichier ?** À une IA ou à un humain qui veut comprendre comment l'application est construite, naviguer dans le code, et situer ce qu'il voit à l'écran par rapport à la structure logicielle. Pour un utilisateur métier, ce fichier est secondaire. ## 1. Stack technique ### Frontend - **React 19.2.4** (composants fonctionnels, hooks) - **React Router 7** — routage multipage - **Bootstrap 5.3** — base UI - **CSS personnalisé** avec variables CSS (`var(--font-size-mobile)`, etc.) pour le responsive - **i18next 23** — internationalisation (10 langues : fr, en, de, es, zh, ru, it, pt, ar, ja) ### Backend (consommé par l'app, hors de ce repo) - API REST **Django** sur `http://127.0.0.1:8000` (configurable via `REACT_APP_API_URL`) - **WebSocket** par utilisateur : `ws:///ws/user///` - Authentification **token-based**, conservée en `sessionStorage` ### Bibliothèques métier | Usage | Bibliothèques | |-------|---------------| | PDF | `jspdf`, `jspdf-autotable` | | Codes-barres / QR | `JSBarcode`, `qrcode.react` | | Cartographie | `leaflet`, `react-leaflet`, `mapbox-gl` | | Excel | `xlsx` | | Caméra | `react-webcam` | | Crypto | `crypto-js`, `simple-peer` | | Icônes | `react-icons` | ## 2. Arborescence du code ``` src/ ├── App.js # Racine de l'application + routage ├── index.js # Point d'entrée React ├── i18n.js # Configuration multilingue ├── context/ # Contextes globaux (4) │ ├── WebSocketContext.js # Temps réel + reconnexion auto │ ├── JourneeContext.js # Journée opérationnelle active │ ├── DeviseContext.js # Devise courante │ └── FinanceModalContext.js ├── hooks/ # ~51 hooks personnalisés (un par domaine métier) ├── services/ # Couche API │ └── apiConfig.js # 20+ endpoints centralisés ├── page/ # Pages applicatives (organisées par domaine) │ ├── login/ │ ├── home/ │ ├── journee/ │ ├── entrepot/ │ ├── categories/ │ ├── designations/ │ ├── tva/ │ ├── souscomptes/ │ ├── familledepense/ │ ├── clients/ │ ├── fournisseurs/ │ ├── psa/ │ ├── liencommercial/ │ ├── vehicule/ │ ├── ristournes/ │ ├── objectif/ │ ├── stock/ │ │ ├── inventaire/ │ │ ├── transfert/ │ │ ├── sortiesstock/ │ │ ├── retouremballage/ │ │ ├── expeditionemballage/ │ │ └── historiquedesignation/ │ ├── achat/ │ │ ├── factureachat/ │ │ └── precommande/ │ ├── ventes/ │ │ ├── facturevente/ │ │ ├── embarquement/ │ │ └── facturesupprimee/ │ ├── finances/ │ │ ├── caisse/ │ │ ├── versement/ │ │ ├── depense/ │ │ ├── retrait/ │ │ ├── approvisionnement/ │ │ ├── finfournisseurs/ │ │ └── etats/ │ └── client/ │ ├── ristourne/ │ ├── creance/ │ └── historique/ └── components/ # Composants partagés ``` ## 3. Patron Responsive (PC / Tablet / Mobile) Chaque page métier a généralement **trois variantes** : - `XPC.js` — interface bureau (≥ 1024px) - `XTablet.js` — tablette (768-1023px) - `XMobile.js` — mobile (< 768px) Le hook `useScreenSize()` détecte la taille et le composant parent (`X.js` sans suffixe) sélectionne la bonne variante. **Exemple** : `Journee.js` choisit entre `JourneePC.js`, `JourneeTablet.js`, `JourneeMobile.js`. Les **modales** suivent la même règle : `XModalPC.js`, `XModalTablet.js`, `XModalMobile.js`. ## 4. Patron des hooks métier Chaque domaine a un **hook dédié** dans `src/hooks/` qui : - Encapsule l'appel API - Gère l'état local (liste, sélection, soumission) - Écoute les événements WebSocket pour le rafraîchissement temps réel - Expose des actions (créer, modifier, supprimer, valider) **Exemples** : `useFactureVente`, `useInventaireModal`, `useStockParProvenance`, `useFinFournisseur`, `useFeuilleRoute`. ⚠️ **Règle importante** (issue d'un retour d'expérience consigné en mémoire utilisateur) : > Lors d'un rafraîchissement déclenché par WebSocket, **ne jamais remettre l'état `loading` à `true`** si des données sont déjà présentes — utiliser le pattern `if (!data) setLoading(true)` pour éviter le « flash » de spinner. ## 5. Contextes globaux | Contexte | Rôle | |----------|------| | **WebSocketContext** | Établit et maintient une connexion WebSocket par utilisateur, avec reconnexion automatique à backoff (3 → 30 s). Distribue les messages aux hooks abonnés. | | **JourneeContext** | Conserve la journée active (id, date, état). Toutes les opérations métier s'y rattachent. | | **DeviseContext** | Devise courante et symbole (`deviseSymbol`) pour l'affichage des montants. | | **FinanceModalContext** | Ouverture/fermeture coordonnée des modales finance. | ## 6. Authentification & sécurité - **Login** : page `src/page/login/` (3 variantes responsive) - **Token** stocké en `sessionStorage` (perdu à la fermeture du navigateur) - **Type d'utilisateur** : différents profils (à confirmer dans la doc backend) - Les **routes protégées** redirigent vers `Login.js` si pas authentifié ## 7. Internationalisation - 10 langues : **fr**, **en**, **de**, **es**, **zh**, **ru**, **it**, **pt**, **ar**, **ja** - Détection automatique de la langue du navigateur - Fichiers de traduction dans `src/locales/` (un par langue) - Utilisation dans les composants : `const { t } = useTranslation();` puis `t('cle')` ⚠️ **Règle des hooks** : `useTranslation()` doit être appelé **avant tout `return` conditionnel** (sinon erreur "Rendered more hooks than during the previous render"). C'est une règle React générale, particulièrement piégeuse dans les modales avec un early return sur `if (!open)`. ## 8. WebSocket et temps réel - Une connexion par utilisateur : `ws:///ws/user///` - **Reconnexion automatique** avec backoff exponentiel (3, 6, 12, 24, 30 s max) - Les hooks métier s'abonnent aux **événements typés** (ex. `facture_vente_created`, `stock_updated`) - À la réception, ils rafraîchissent leurs données **sans flash de spinner** (voir règle § 4) ## 9. Endpoints backend principaux Centralisés dans `src/services/apiConfig.js`. Couvrent : ``` /auth/... /entrepots/... /categories/... /designations/... /tva/... /sous-comptes/... /familles-depenses/... /clients/... /fournisseurs/... /psa/... /liens-commerciaux/... /vehicules/... /journees/... /factures-vente/... /factures-achat/... /precommandes/... /feuilles-route/... /embarquements/... /inventaires/... /transferts/... /sorties-stock/... /retours-emballage/... /expeditions-emballage/... /historique-designation/... /caisses/... /versements/... /depenses/... /retraits/... /approvisionnements/... /fin-fournisseurs/... /etats/... /objectifs/... /ristournes/... /creances/... ``` (la liste exacte se vérifie dans `apiConfig.js`) ## 10. Génération de documents - **PDF** : factures, bons de livraison, états — via `jspdf` + `jspdf-autotable` - **Codes-barres** : impression d'étiquettes produits - **QR codes** : suivi de lots, étiquetage - **Excel** : exports pour comptabilité externe ## 11. Géolocalisation - **Mapbox / Leaflet** pour le suivi des livraisons et l'affichage d'itinéraires - Les entrepôts ont des coordonnées GPS - Voir `documentation/GEOLOCALISATION_ITINERAIRE.md` (documentation technique existante) ## 12. Conventions de code - Composants fonctionnels uniquement (React 19) - Hooks personnalisés pour toute logique métier réutilisable - Aucun `class component` - État local via `useState`, état partagé via Contexte - Styles inline ou via variables CSS (cohérent avec les 3 variants responsive) ## 13. Lancer le projet en local ```bash npm install npm start # démarre sur http://localhost:3000 ``` Le backend Django doit tourner en parallèle sur `http://127.0.0.1:8000` (ou l'URL définie dans `REACT_APP_API_URL`). --- ## Pour aller plus loin - Catalogue complet des opérations métier : `02-PARAMETRAGE.md` à `09-JOURNEE.md` - Cas d'usage end-to-end : `10-SCENARIOS.md` - Documentation technique existante (patterns, traductions, API) : voir `documentation/` (minuscule) à la racine du repo --- # 02 — Paramétrage initial > **Quand utiliser ce module ?** Avant toute opération métier. Tout le reste de l'application (ventes, achats, stock, finances) dépend de ce qui est paramétré ici. Sans devise, sans entrepôt, sans produit (designation), aucune transaction ne peut être saisie. ## Ordre recommandé de paramétrage 1. **Devise** (sessionStorage — choix global) 2. **Entrepôts** (au moins un est requis) 3. **Catégories** de produits 4. **Designations** (produits) — dépendent des catégories 5. **TVA** (taux applicables) 6. **Sous-comptes** (caisses, comptes utilisateur) — dépendent des entrepôts 7. **Familles de dépenses** (catégorisation des charges) Une fois ce socle posé, le module **Journée** (voir `09-JOURNEE.md`) peut être ouvert pour démarrer l'exploitation. --- ## A. Devise ### Finalité Définir la devise dans laquelle tous les montants de l'application sont saisis et affichés. La devise est globale (pas par entrepôt). ### Accès La devise est gérée par un sélecteur global (généralement présent dans l'en-tête de l'application ou la page de connexion). Elle est conservée dans la session du navigateur. ### Devises disponibles | Code | Symbole | Devise | |------|---------|--------| | XAF | FCFA | Franc CFA Afrique centrale | | USD | $ | Dollar américain | | EUR | € | Euro | | GBP | £ | Livre sterling | | JPY | ¥ | Yen japonais | ### Opération : changer la devise active 1. Cliquer sur le sélecteur de devise (en-tête). 2. Choisir une devise dans la liste. 3. Le changement est propagé immédiatement à toutes les pages ouvertes (via un événement interne `auth-change`). ⚠️ **Effet** : tous les montants déjà saisis ne sont **pas reconvertis** — seul l'affichage du symbole change. Choisir la devise **avant** de saisir des transactions. --- ## B. Entrepôts ### Finalité Représenter chaque lieu physique de stockage et/ou de vente. Un entrepôt regroupe un stock distinct et peut héberger ses propres opérations (ventes, achats, inventaires). ### Accès Menu **Paramètres → Entrepôts**. ### Prérequis - Devise paramétrée (§ A) ### Opérations possibles 1. Créer un entrepôt 2. Modifier un entrepôt 3. Supprimer un entrepôt (ou plusieurs en sélection multiple) 4. Géolocaliser un entrepôt sur carte 5. Importer une liste d'entrepôts depuis Excel ### 1. Créer un entrepôt **Champs requis** : - *Nom* - *Adresse* - *Latitude* et *Longitude* (positionnement carte) - *Photo de l'emplacement* (optionnel) **Pas-à-pas** : 1. Cliquer sur **[Nouvel entrepôt]** (ou équivalent). 2. Renseigner *Nom* et *Adresse*. 3. Positionner le marqueur sur la **carte interactive** (Leaflet/Mapbox). Les coordonnées s'auto-remplissent. 4. (Optionnel) Joindre une **photo** du site. 5. Valider. > Note : selon le profil utilisateur (type **client**), l'entrepôt peut s'afficher sous l'alias « **Site de vente** » dans l'interface. ### 2. Modifier un entrepôt 1. Cliquer sur la ligne de l'entrepôt. 2. Modifier les champs souhaités. 3. Sauvegarder. ### 3. Supprimer un ou plusieurs entrepôts 1. Cocher la (les) case(s) en début de ligne. 2. Cliquer sur **[Supprimer]**. 3. Confirmer. ⚠️ La suppression d'un entrepôt qui contient encore du stock ou des opérations en cours peut être bloquée — résoudre d'abord les dépendances. ### 4. Importer depuis Excel 1. Cliquer sur **[Importer]**. 2. Sélectionner un fichier Excel respectant le modèle attendu (colonnes : nom, adresse, latitude, longitude). 3. Confirmer. --- ## C. Catégories de produits ### Finalité Regrouper les designations (produits) par famille pour faciliter la navigation, le filtrage, et appliquer des règles communes (épargne, ajustements). ### Accès Menu **Paramètres → Catégories**. ### Opérations possibles 1. Créer une catégorie 2. Modifier les éléments d'une catégorie (le **nom** n'est **pas modifiable** après création) 3. Supprimer une catégorie 4. Importer depuis **STORES** (base centrale) 5. Importer depuis Excel ### 1. Créer une catégorie **Champs requis** : - *Nom* (immuable après création) - *Éléments* — liste, chaque élément ayant : - *Nom* de l'élément - *Montant* - *Type* : `épargne` ou `applicatif` - *Signe* : `+` ou `−` **Pas-à-pas** : 1. Cliquer sur **[Nouvelle catégorie]**. 2. Saisir le *Nom*. 3. Ajouter un ou plusieurs *éléments* via **[+ Ajouter élément]**. 4. Pour chaque élément, renseigner nom, montant, type, signe. 5. Valider. ### 2. Modifier une catégorie 1. Ouvrir la catégorie. 2. Modifier les éléments (ajouter/supprimer/changer). 3. Le champ *Nom* reste grisé — pour le renommer, supprimer et recréer. 4. Sauvegarder. ### 3. Importer depuis STORES ou Excel - **STORES** : importe la liste centrale partagée. - **Excel** : importe depuis un modèle conforme. --- ## D. Designations (produits / articles) ### Finalité Représenter chaque article géré : nom, code, prix, unités, fournisseur d'origine. ### Accès Menu **Paramètres → Désignations**. ### Prérequis - **Catégorie** créée (§ C) - **Fournisseur** créé (voir `03-CLIENTS-FOURNISSEURS.md`) - (Optionnel) **Emballage** défini si l'article est associé à un emballage consigné ### Opérations possibles 1. Créer une designation 2. Modifier une designation (édition limitée) 3. Supprimer une designation 4. Importer depuis STORES (filtrage par fournisseur + catégorie) 5. Associer une **image produit** ### 1. Créer une designation **Champs requis** : - *Nom* - *Code* (référence unique) - *Catégorie* (sélection) - *Fournisseur* (sélection) - *Prix d'achat HT* (`prixachatht`) - *Prix de vente HT en gros* (`prixventeht`) - *Prix de vente détail* (`prixvente_detail`) - *Taxable* : oui/non (active la TVA) - *Unité de gros* (ex. carton, sac) - *Unité de détail* (ex. bouteille, kg) - *Coefficient* gros → détail (combien d'unités détail dans une unité gros) - *Emballage* (optionnel — référence à un emballage consigné) - *Signe emballage* (`+` consignation, `−` retour) si applicable - *Description* (texte libre stocké en JSON) - *Image* (optionnel) **Pas-à-pas** : 1. Cliquer sur **[Nouvelle désignation]**. 2. Renseigner *Nom*, *Code*. 3. Sélectionner *Catégorie* puis *Fournisseur*. 4. Saisir les **prix** (achat HT, vente HT gros, vente détail). 5. Cocher *Taxable* si la TVA s'applique. 6. Renseigner les **unités** de gros et détail, et le **coefficient**. 7. (Optionnel) Lier un *Emballage* et son *signe*. 8. Ajouter description et image si nécessaire. 9. Valider. ### 2. Modifier une designation ⚠️ **Édition limitée** : seuls les **prix** et la **description** sont modifiables après création. Pour changer le nom, le code, la catégorie ou le fournisseur, il faut **supprimer puis recréer**. 1. Ouvrir la designation. 2. Modifier les champs autorisés (prix, description). 3. Sauvegarder. ### 3. Importer depuis STORES 1. Cliquer sur **[Importer STORES]**. 2. Filtrer par *Fournisseur* et *Catégorie*. 3. Cocher les designations à importer. 4. Confirmer. --- ## E. TVA ### Finalité Définir les taux de TVA applicables aux ventes et achats des produits *taxables*. ### Accès Menu **Paramètres → TVA**. ### Opérations possibles 1. Créer un taux de TVA 2. Modifier un taux 3. Supprimer un taux 4. Importer depuis STORES (avec **détection des doublons**) ### 1. Créer un taux **Champs requis** : - *Taux* (% — ex. 19.25) - *Description* (ex. « TVA standard », « Taux réduit ») **Pas-à-pas** : 1. Cliquer sur **[Nouveau taux]**. 2. Saisir le pourcentage. 3. Décrire le contexte d'usage. 4. Valider. ### 2. Modifier / supprimer Pratiques standards — la suppression d'un taux utilisé par des factures peut être restreinte. ### 3. Importer depuis STORES L'import central détecte automatiquement les doublons et n'insère que les nouveaux taux. --- ## F. Sous-comptes ### Finalité Les sous-comptes représentent des **utilisateurs opérationnels** rattachés à un entrepôt, avec un **profil de permissions** détaillé et un mode de facturation. Ils servent à la fois d'utilisateur de connexion et de référence financière (les versements, retraits, dépenses sont attribués à un sous-compte). ### Accès Menu **Paramètres → Sous-comptes**. ### Prérequis - Au moins un **entrepôt** (§ B) ### Opérations possibles 1. Créer un sous-compte 2. Modifier 3. Activer / désactiver 4. Définir les permissions (11 zones) 5. Définir les seuils de réduction autorisée 6. Joindre une **photo de profil** ### 1. Créer un sous-compte **Champs requis** : - *Nom* (libellé du sous-compte) - *Utilisateur* (identifiant de connexion) - *PIN* (code à 4 chiffres typiquement) - *Entrepôt* de rattachement - *Photo de profil* (optionnel) - *Réduction minimum* et *Réduction maximum* autorisées (en %) - *Type de facturation* : `direct` ou `codebar` (scan code-barres) - *Actif* : oui/non - **11 permissions** (cochables) — couvrent les zones : facture vente, facture achat, transferts, inventaire, finances, etc. **Pas-à-pas** : 1. Cliquer sur **[Nouveau sous-compte]**. 2. Saisir *Nom*, *Utilisateur*, *PIN*. 3. Sélectionner *Entrepôt*. 4. Définir les *réductions* min/max autorisées. 5. Choisir le *type de facturation*. 6. Cocher les **permissions** correspondant au rôle (saisie facture, validation, accès finance, etc.). 7. (Optionnel) Téléverser une *photo*. 8. Activer le sous-compte. 9. Valider. ### 2. Modifier / désactiver - Pour révoquer les accès d'un utilisateur sans supprimer l'historique : **désactiver** (champ *Actif* à `non`). - Pour modifier les permissions : éditer puis sauvegarder. --- ## G. Familles de dépenses ### Finalité Catégoriser les dépenses (carburant, loyer, fournitures…) pour le suivi analytique en finance. ### Accès Menu **Paramètres → Familles de dépenses**. ### Opérations possibles 1. Créer une famille 2. Renommer 3. Supprimer ### 1. Créer une famille **Champs requis** : - *Nom* (unique) **Pas-à-pas** : 1. Cliquer sur **[Nouvelle famille]**. 2. Saisir le nom. 3. Valider. ### 2. Modifier / supprimer Standard. La suppression d'une famille utilisée par des dépenses peut être restreinte. --- ## Liens avec autres modules | Élément paramétré | Utilisé dans | |-------------------|--------------| | **Devise** | Affichage de tous les montants dans l'application | | **Entrepôts** | `03-CLIENTS-FOURNISSEURS.md` (fournisseur/client lié), `04-STOCK.md` (stock par entrepôt), `05-VENTES.md`, `06-ACHATS.md`, `07-FINANCES.md` (sous-compte par entrepôt) | | **Catégories** | `02-PARAMETRAGE.md` (création de designations), filtrage dans `04-STOCK.md` | | **Designations** | `04-STOCK.md`, `05-VENTES.md`, `06-ACHATS.md` — c'est l'unité de référence des transactions | | **TVA** | `05-VENTES.md`, `06-ACHATS.md` (calcul HT/TTC sur lignes taxables) | | **Sous-comptes** | `07-FINANCES.md` (versements, retraits, dépenses), authentification et permissions | | **Familles de dépenses** | `07-FINANCES.md` (catégorisation des dépenses) | --- ## Récapitulatif : checklist du paramétrage initial - [ ] Devise choisie - [ ] Au moins 1 entrepôt créé (avec coordonnées GPS si possible) - [ ] Catégories produits créées - [ ] Designations (produits) créées et rattachées catégorie + fournisseur - [ ] Au moins 1 taux de TVA défini - [ ] Au moins 1 sous-compte (caisse principale) créé et actif - [ ] Familles de dépenses créées (minimum : Charges fixes, Carburant, Achats divers) Une fois cette checklist complète, ouvrir la première journée → `09-JOURNEE.md`. --- # 03 — Clients & Fournisseurs > **Quand utiliser ce module ?** Pour créer, modifier ou consulter les fiches des partenaires commerciaux avec qui vous échangez (acheteurs et vendeurs), ainsi que les véhicules, les PSA et les liens commerciaux qui les relient. ## A. Clients ### Finalité Tenir la fiche de chaque client (entreprise ou particulier) à qui l'on vend, avec ses conditions commerciales (PSA, TVA, ristourne, découvert autorisé). ### Accès Menu **Paramètres → Clients**. ### Prérequis - Devise paramétrée → `02-PARAMETRAGE.md` - (Si applicable) PSA et TVA paramétrés → `02-PARAMETRAGE.md` et § C ci-dessous ### Opérations possibles 1. Créer un client 2. Modifier un client 3. Désactiver / supprimer un client 4. Définir les options commerciales (achète au prix d'achat, hors ristourne) 5. Consulter l'historique d'un client (§ F) 6. Consulter les créances d'un client (§ G) 7. Voir les ristournes d'un client (→ `08-OBJECTIFS-RISTOURNES.md`) 8. Importer depuis STORES 9. Importer depuis Excel 10. Rechercher / filtrer dans la liste ### 1. Créer un client **Champs requis** : - *Nom* - *Utilisateur* (identifiant de connexion si le client se connecte à un portail) - *PIN* (6 chiffres) - *Email* - *Adresse* - *PSA* (sélection — voir § C) - *TVA* (sélection) - *Type de facturation* : `direct` ou `codebar` - *Seuil de découvert* (montant maximum de créance autorisée) - *Client de référence* (rattachement à un compte parent — optionnel) **Pas-à-pas** : 1. Cliquer sur **[Nouveau client]**. 2. Renseigner les champs ci-dessus. 3. Valider. ### 2. Modifier un client L'écran d'édition expose deux **toggles exclusifs** (un seul à la fois) : - **Achète au prix d'achat** : applique le prix d'achat HT en facture de vente (cas particulier — partenaire stratégique). - **Hors ristourne** : exclut le client des calculs de ristourne automatique. Tous les champs principaux restent modifiables (sauf cas standards bloqués). ### 3. Désactiver / supprimer - **Désactiver** : conserve l'historique, bloque les nouvelles opérations. - **Supprimer** : possible uniquement si aucune opération n'est rattachée. --- ## B. Fournisseurs ### Finalité Tenir la fiche de chaque fournisseur (interne ou externe) auprès duquel on achète des produits. ### Accès Menu **Paramètres → Fournisseurs**. ### Prérequis - TVA et PSA paramétrés (si à appliquer) → § C et `02-PARAMETRAGE.md` ### Opérations possibles 1. Créer un fournisseur 2. Modifier un fournisseur 3. Supprimer un fournisseur (uniquement de type `fournisseur_externe`) 4. Importer depuis STORES ### 1. Créer un fournisseur **Champs requis** : - *Nom* - *TVA* applicable par défaut - *PSA* applicable par défaut **Pas-à-pas** : 1. Cliquer sur **[Nouveau fournisseur]**. 2. Saisir le nom, sélectionner TVA et PSA. 3. Valider. ### 2. Modifier Édition standard. Les fournisseurs sont catégorisés en interne vs externe — seul un **fournisseur externe** peut être supprimé directement. --- ## C. PSA (Plan Spécial d'Accès) ### Finalité Le **PSA** est un taux paramétrable appliqué en majoration du prix d'achat lors de la valorisation du stock (voir formule PUG dans `04-STOCK.md`). Il représente un coût ou une marge additionnelle propre à un partenaire ou une catégorie d'opérations. > **À préciser avec l'équipe métier** : la signification fonctionnelle exacte du PSA (taxe, redevance, marge intermédiaire) doit être confirmée — le code et l'interface manipulent uniquement un *taux + description*. ### Accès Menu **Paramètres → PSA**. ### Opérations possibles 1. Créer un PSA (saisie manuelle) 2. Modifier un PSA 3. Supprimer un PSA 4. Importer depuis STORES (« super PSA » — liste partagée) 5. Importer depuis Excel ### Champs requis - *Taux* (en %) - *Description* ### Pas-à-pas — Créer un PSA 1. Cliquer sur **[Nouveau PSA]**. 2. Saisir le taux (%) et la description. 3. Valider. --- ## D. Liens commerciaux ### Finalité Établir une **relation officielle** entre un fournisseur et un client (ou entre deux entités) via un code identifiant unique (CIU). Cela autorise certaines opérations conjointes (ex. ventes croisées, partage de stock). ### Notion de CIU Chaque entité a un **CIU** (Code d'Identification Unique) au format : - `VYT-G-XXXXXX` (côté fournisseur) - `VYT-C-XXXXXX` (côté client) Le lien se crée en saisissant le CIU de l'autre partie et en validant la vérification. ### Accès Menu **Paramètres → Liens commerciaux**. ### Opérations possibles 1. Vérifier un CIU (étape préalable) 2. Créer un lien commercial 3. Modifier (réservé au fournisseur de la relation) 4. Désactiver un lien (conserve l'historique) 5. Supprimer un lien (si aucun historique) ### Pas-à-pas — Créer un lien 1. Cliquer sur **[Nouveau lien]**. 2. Saisir le **CIU** de la partie à lier. 3. Cliquer sur **[Vérifier]** — l'application interroge la base centrale. 4. Si la fiche correspond, confirmer la création du lien. 5. Valider. --- ## E. Véhicules ### Finalité Gérer le parc de véhicules utilisés pour les **livraisons** (feuilles de route, embarquements). Permet aussi le **suivi GPS en temps réel** via un boîtier IMEI. ### Accès Menu **Paramètres → Véhicules**. ### Opérations possibles 1. Créer un véhicule 2. Modifier 3. Désactiver / supprimer 4. Suivre la position GPS en temps réel 5. Basculer la vue carte ↔ satellite ### Champs requis - *Immatriculation* - *Type* : `voiture` / `moto` / `camion` / `bus` / `van` / `autre` - *Marque* - *Modèle* - *Couleur* - *Propriétaire* - *Contact* (numéro) - *IMEI* du boîtier GPS (avec vérification de connexion au moment de la saisie) ### Pas-à-pas — Créer un véhicule 1. Cliquer sur **[Nouveau véhicule]**. 2. Saisir tous les champs (immat, type, marque, modèle, couleur). 3. Saisir le **propriétaire** et son **contact**. 4. Saisir l'**IMEI** et cliquer sur **[Vérifier]** : l'application teste la connexion au boîtier. 5. Valider. ### Suivi GPS - Les positions sont rafraîchies par **polling toutes les 3 secondes**. - Vue carte ou satellite (Leaflet / Mapbox). - Une **légende de pastilles** indique l'état des véhicules (en mouvement, à l'arrêt, hors ligne…). ### Lien avec les livraisons Un véhicule actif et géolocalisé est sélectionnable lors de la création d'un **embarquement** (voir `05-VENTES.md`). --- ## F. Historique client ### Finalité Voir l'ensemble des opérations passées d'un client (factures, paiements, ristournes, retours). ### Accès Menu **Clients → Historique**. ### Colonnes affichées 1. Client 2. Action (type d'opération) 3. Désignation concernée 4. Montant 5. Date ### Filtres - Calendrier (par journée ou plage de dates) - Sélection de client > **Note** : la connexion des données à l'historique opérationnel est en cours de finalisation côté backend. Selon l'environnement, certaines opérations peuvent ne pas encore remonter ici. --- ## G. Créances client ### Finalité Suivre les sommes dues par chaque client suite à des ventes à crédit non encore réglées. ### Accès Menu **Clients → Créances**. ### Colonnes affichées 1. Client 2. Montant dû 3. Échéance 4. Statut (à recouvrer, en retard, soldé) 5. Date de création ### Opérations possibles 1. **Lister** les créances filtrées par client / période 2. **Ajouter** une créance manuelle (bouton **[+ Ajouter]**) — usage administratif 3. Marquer une créance comme réglée (via le module Versement → `07-FINANCES.md`) > **Note** : la connexion des données aux ventes à crédit est en cours de finalisation. Le détail complet du cycle de vie d'une créance est documenté dans `08-OBJECTIFS-RISTOURNES.md`. --- ## H. Ristournes client → Voir `08-OBJECTIFS-RISTOURNES.md` pour le paramétrage des **règles de ristourne** et le suivi des **ristournes acquises par client**. --- ## Liens avec autres modules | Élément | Utilisé dans | |---------|--------------| | **Clients** | `05-VENTES.md` (acheteurs des factures), `08-OBJECTIFS-RISTOURNES.md` (créances, ristournes) | | **Fournisseurs** | `06-ACHATS.md` (factures d'achat, précommandes), `07-FINANCES.md` (règlements fournisseurs) | | **PSA** | `02-PARAMETRAGE.md` (designations), `04-STOCK.md` (valorisation), `05-VENTES.md` / `06-ACHATS.md` (calculs de prix) | | **Liens commerciaux** | Autorisent certaines opérations partagées entre `05-VENTES.md` et `06-ACHATS.md` | | **Véhicules** | `05-VENTES.md` (embarquement, feuille de route, suivi livraison) | | **Historique / Créances** | Vue transversale des opérations de `05-VENTES.md` et `07-FINANCES.md` | --- # 04 — Stock > **Quand utiliser ce module ?** Pour suivre, déplacer, ajuster et valoriser les marchandises présentes dans vos entrepôts. C'est le cœur du système : la plupart des opérations métier (ventes, achats, inventaires) y aboutissent. ## Concepts clés ### Designation Une *designation* est un produit/article. Elle est définie au paramétrage (voir `02-PARAMETRAGE.md` § D). ### Lot Chaque entrée de stock crée un **lot** daté, identifiable, valorisé à son coût d'acquisition. Cela permet la **traçabilité** (qui, quand, à quel prix) et un traitement FIFO. Un lot peut être issu d'un achat, d'un transfert, ou d'un retour acheteur. ### Provenance Chaque ligne de stock est rattachée à l'une de ces **4 provenances** : | Provenance | Couleur | Signification | |------------|---------|---------------| | `achat` | vert | Entrée via facture d'achat fournisseur | | `session` | violet | Stock initial / saisie manuelle | | `transfert` | orange | Reçu d'un autre entrepôt | | `retour_acheteur` | cyan | Marchandise rendue par un client | Le filtre par provenance est disponible dans l'inventaire et les écrans de stock. ### Gros vs Détail Chaque designation a deux unités : - **Unité gros** (carton, sac, bidon…) - **Unité détail** (bouteille, kg, pièce…) Le **coefficient** (paramétré sur la designation) indique combien d'unités détail composent une unité gros. Exemple : 1 carton = 12 bouteilles → coefficient = 12. Lors de l'inventaire, la saisie en **détail** se convertit automatiquement en **gros + reste détail** dès que la quantité atteint le coefficient (voir § A). ### Multi-entrepôt Le stock est cloisonné par entrepôt. Un même produit a un solde par entrepôt, des lots par entrepôt, et une valorisation par entrepôt. ### Mode de saisie : Agrégat vs Par lot - **Agrégat** : on saisit une quantité unique, qui s'impute au **lot le plus récent** (par défaut FIFO inverse pour les sorties). - **Par lot** : on choisit explicitement le lot concerné — utile en cas d'inventaire détaillé ou de péremption. ### Calcul du prix unitaire gros (PUG / valorisation) Le coût unitaire d'un lot est calculé à l'entrée : ``` PUG = (prix_achat_HT × (1 + TVA/100 + PSA/100)) + emballage_override (avec ou sans TVA selon `taxable`) + Σ frais_applicatifs ``` Détails : - *PSA* : majoration (Plan Spécial d'Accès) appliquée au prix d'achat - *Emballage override* : prix d'emballage défini sur la facture d'achat (si applicable) - *Frais applicatifs* : transport, douane, manutention… saisis sur la facture d'achat Voir aussi `documentation/VALORISATION_STOCK_ET_FACTURE_VENTE.md` et `CALCUL_FACTURE_ACHAT.md` à la racine du repo. --- ## A. Inventaire physique ### Finalité Comparer le stock **théorique** (calculé par l'application) au stock **physique** (compté manuellement) pour ajuster les écarts et valoriser leur impact. ### Prérequis - Entrepôts créés → `02-PARAMETRAGE.md` - Designations créées → `02-PARAMETRAGE.md` - Stock existant (au moins une entrée via achat → `06-ACHATS.md`, ou stock initial via session) - **Journée ouverte** → `09-JOURNEE.md` ### Accès Menu **Stock → Inventaire**. ### Opérations possibles 1. Démarrer un inventaire pour la journée 2. Filtrer par provenance, catégorie, lot 3. Basculer le **mode** d'une designation (Agrégat ↔ Par lot) 4. Saisir les quantités physiques (gros + détail) — conversion automatique 5. Définir la **provenance** d'une designation 6. Valider une **catégorie** entière 7. Valider tout l'inventaire (mode groupé) 8. Lire les écarts (quantité et valeur) ### Pas-à-pas — Saisie de l'inventaire 1. Ouvrir le module **Inventaire**. 2. L'application liste toutes les designations avec leur **stock théorique** par lot. 3. (Optionnel) Filtrer par **provenance** (boutons colorés) ou par **catégorie**. 4. Pour chaque designation, deux modes d'affichage : **Catégorie** (groupe par catégorie produit) ou **Groupe** (groupe par autre critère). 5. Pour chaque ligne : - Saisir la quantité **gros** comptée - Saisir la quantité **détail** comptée - L'écart (qté et valeur) s'affiche en temps réel - Couleur : rouge si négatif, vert si positif ⚠️ **Conversion automatique détail → gros** : si la saisie en détail atteint le coefficient, l'application convertit le surplus en gros et garde le reste en détail. Exemple : coefficient 12, saisie détail 15 → résultat 1 gros + 3 détail. ### Pas-à-pas — Valider une catégorie 1. En mode **Catégorie**, l'en-tête de chaque catégorie a un bouton **[Valider la catégorie]**. 2. Cliquer pour valider tout le bloc. 3. La catégorie passe en état « Validée » et n'est plus modifiable. ### Pas-à-pas — Valider tout l'inventaire 1. En mode **Groupé** : bouton **[Valider l'inventaire]** dans le pied de modale. 2. La validation envoie l'ensemble des écarts au backend. 3. Le stock théorique est ajusté ; les écarts sont valorisés. ### Lecture des indicateurs en bas de modale - **Valeur par provenance** : ventilation du stock par catégorie d'origine - **Total stock** : valorisation totale (en devise active) - **Écart total** : impact net en valeur (rouge si négatif, vert si positif) --- ## B. Transferts entre entrepôts ### Finalité Déplacer du stock d'un entrepôt source vers un entrepôt destination, en conservant la traçabilité (le lot destination hérite du coût historique). ### Prérequis - Au moins 2 entrepôts → `02-PARAMETRAGE.md` - Stock disponible dans l'entrepôt source - Journée ouverte → `09-JOURNEE.md` ### Accès Menu **Stock → Transferts**. ### Opérations possibles 1. Créer un transfert 2. Ajouter des lignes (designation + quantité) 3. Valider le transfert 4. Consulter l'historique des transferts 5. Imprimer un bon de transfert ### Pas-à-pas — Créer un transfert 1. Cliquer sur **[Nouveau transfert]**. 2. Sélectionner l'**entrepôt source**. 3. Sélectionner l'**entrepôt destination**. 4. Ajouter les **lignes** : pour chaque designation, choisir le lot source et la quantité (gros + détail). 5. Valider. ### Effets de la validation - Décrément du stock dans l'entrepôt source (lot d'origine). - Création d'un **nouveau lot** dans l'entrepôt destination avec : - Provenance = `transfert` (couleur orange) - Code-barre préfixé `TRF--` - **Coût** hérité du lot source (PUG identique) - Apparition dans l'historique des designations concernées des deux entrepôts. --- ## C. Sorties de stock ### Finalité Enregistrer une sortie de stock **hors vente** (perte, offre, casse…). Ces sorties impactent le stock théorique sans générer de facture. ### Prérequis - Stock disponible - Journée ouverte - Sous-compte autorisé (selon permissions) ### Accès Menu **Stock → Sorties**. ### Opérations possibles 1. Créer une sortie 2. Sélectionner un **justificatif** (motif) 3. Saisir designation, lot, quantité 4. Valider ### Justificatifs disponibles | Justificatif | Usage | |--------------|-------| | `casse` | Produit cassé pendant manutention | | `avarie_vide` | Emballage vide endommagé | | `avarie_plein` | Produit plein endommagé | | `offre_boss` | Offert par la direction | | `offre_client` | Offert à un client (geste commercial) | | `autre` | Autre motif — décrire en commentaire | ### Pas-à-pas 1. Cliquer sur **[Nouvelle sortie]**. 2. Sélectionner l'**entrepôt** et la **designation**. 3. Choisir le **lot** (ou laisser en mode agrégat → impute au lot le plus récent). 4. Saisir la **quantité** (gros + détail). 5. Sélectionner le **justificatif**. 6. (Optionnel) Ajouter un commentaire. 7. Valider. L'opération est enregistrée dans l'historique de la designation et impacte les états financiers (perte valorisée si applicable). --- ## D. Retour d'emballages (côté client) ### Finalité Enregistrer un retour d'emballages consignés rapportés par un **client** (ex. bouteilles consignées rapportées avec la facture suivante). ### Prérequis - Emballage paramétré sur la designation - Client existant → `03-CLIENTS-FOURNISSEURS.md` - Journée ouverte ### Accès Menu **Stock → Retour emballage**. ### Opérations possibles 1. Sélectionner un client 2. Saisir les designations et quantités retournées 3. Valider le retour ### Effets - Stock d'emballages crédité (réintégré). - Signe de l'emballage géré selon paramétrage de la designation (`+` ou `−`). - Imputation visible dans l'historique de la designation. > Note : techniquement, **Retour** et **Expédition** d'emballages utilisent le même endpoint backend (`/api/retour_colis/`) différencié par un champ `mode` (`acheteur` vs `fournisseur`). --- ## E. Expédition d'emballages (côté fournisseur) ### Finalité Renvoyer au **fournisseur** des emballages consignés à récupérer. ### Prérequis - Fournisseur existant → `03-CLIENTS-FOURNISSEURS.md` - Emballages en stock à expédier - Journée ouverte ### Accès Menu **Stock → Expédition emballage**. ### Opérations possibles 1. Sélectionner un fournisseur 2. Saisir les designations et quantités expédiées 3. Valider l'expédition 4. Imprimer un bon d'expédition (PDF) ### Effets - Décrément du stock d'emballages. - Trace dans l'historique de la designation et du fournisseur. --- ## F. Historique des mouvements (par designation) ### Finalité Consulter, pour une designation donnée, l'intégralité de ses mouvements : entrées (achat, transfert, retour) et sorties (vente, transfert, sortie justifiée, expédition). ### Accès Menu **Stock → Historique designation**. ### Opérations possibles 1. Rechercher une designation 2. Filtrer par période (journée ou plage) 3. Filtrer par type de mouvement 4. Filtrer par entrepôt 5. Exporter en PDF / Excel ### Informations affichées - Date / heure - Type d'opération (achat, vente, transfert, sortie, retour…) - Quantité (gros + détail) - Lot concerné - Solde après opération - Référence du document source (facture, transfert, sortie…) --- ## Liens avec autres modules | Action | Module concerné | |--------|----------------| | **Entrée de stock par achat** | `06-ACHATS.md` (valider une facture d'achat) | | **Sortie de stock par vente** | `05-VENTES.md` (valider une facture de vente) | | **Stock initial / session** | Saisie au paramétrage ou via opération admin | | **Valorisation** | Voir formule PUG ci-dessus ; impacte `07-FINANCES.md` (états) | | **Écarts d'inventaire** | Réintégrés dans les états financiers → `07-FINANCES.md` | | **Suivi par client** | Retours d'emballage liés à `03-CLIENTS-FOURNISSEURS.md` | | **Suivi par fournisseur** | Expéditions d'emballage liées à `03-CLIENTS-FOURNISSEURS.md` | --- ## Règles d'or pour la gestion du stock 1. **Toujours ouvrir la journée** avant d'opérer (sinon refus en saisie). 2. **Inventorier régulièrement** : la fréquence dépend du volume, mais un inventaire mensuel par entrepôt est un minimum. 3. **Choisir la bonne provenance** : un mauvais filtre fausse les analyses. 4. **Utiliser le mode Par lot** pour les produits périssables ou à péremption. 5. **Justifier toute sortie hors vente** : sinon les écarts s'accumulent. 6. **Vérifier le coefficient gros/détail** avant la saisie : une erreur de coefficient propage tous les calculs. --- # 05 — Ventes > **Quand utiliser ce module ?** Pour émettre des factures de vente, organiser les tournées de livraison, charger les véhicules, suivre les livraisons en temps réel, et gérer les annulations. ## Concepts clés | Notion | Définition | |--------|------------| | **Facture de vente** | Document commercial qui matérialise une vente : impacte le stock, crée éventuellement une créance, alimente la caisse. | | **Mode de paiement** | `ESPECE`, `CREDIT`, `OM` (Orange Money), `MOMO` (Mobile Money), selon les options autorisées sur le sous-compte. | | **Réduction** | Remise en %, bornée par les seuils min/max du sous-compte. Verrouillée si le client achète au prix d'achat. | | **Instance** | Document auto-généré quand une facture contient des lignes BONUS (produit offert). Sert au suivi des écarts. | | **Feuille de route** | Tournée de livraison qui regroupe une ou plusieurs factures à livrer, avec calcul d'itinéraire (OSRM). | | **Embarquement** | Chargement d'un véhicule pour une feuille de route donnée — vérification physique des marchandises. | | **Type BONUS** | Ligne de facture représentant un produit offert (sortie de stock sans contrepartie financière). | | **Mode RETOUR** | Ligne de facture qui réinjecte au stock une marchandise retournée par un client. | | **Client DIVERS** | Client générique pour les ventes sans fiche client dédiée (« client libre »). | --- ## Prérequis communs - **Journée ouverte** → `09-JOURNEE.md` - **Client** existant (ou utiliser DIVERS) → `03-CLIENTS-FOURNISSEURS.md` - **Stock disponible** → `04-STOCK.md` - **TVA** paramétrée → `02-PARAMETRAGE.md` - **Sous-compte** actif avec permissions et plage de réduction définies → `02-PARAMETRAGE.md` § F - (Pour livraisons) **Véhicule** créé → `03-CLIENTS-FOURNISSEURS.md` § E --- ## A. Facture de vente ### Finalité Enregistrer une vente : décrémenter le stock, alimenter la caisse ou créer une créance, déclencher éventuellement la chaîne de livraison. ### Accès Menu **Ventes → Factures de vente**. ### Statuts visibles d'une facture | Statut | Indication visuelle | Sens | |--------|---------------------|------| | **Active** | Couleur normale | Facture émise, non encore livrée ni supprimée | | **Dans une feuille de route** | Marqueur `feuille_route=true` | Affectée à une tournée | | **Livrée** | Marqueur `facture_livree[]` | Marchandise remise au client | | **Lien commercial** | Fond gris | Émise dans le cadre d'un lien commercial → `03-CLIENTS-FOURNISSEURS.md` § D | | **Commerciale** | Fond jaune | `is_commercial=true` (cas particulier) | | **Supprimée** | Apparait dans `Factures supprimées` | Annulée selon règles | ### Opérations possibles 1. Créer une facture de vente 2. Ajouter des lignes (manuellement ou par scan code-barres) 3. Définir le mode de paiement 4. Appliquer une réduction 5. Mixer des lignes normales, BONUS, RETOUR 6. Valider la facture 7. Imprimer / exporter en PDF 8. Modifier (selon règles) 9. Supprimer (selon règles) 10. Ajouter à une feuille de route 11. Voir le détail d'une facture validée ### 1. Créer une facture **Champs requis (en-tête)** : - *Client* (ou DIVERS pour client libre) - *Entrepôt* source - *Mode de paiement* : `ESPECE` / `CREDIT` / `OM` / `MOMO` (selon `paiement[]` du sous-compte) - *Réduction* (en %, bornée par [min, max] du sous-compte) **Champs requis (par ligne)** : - *Désignation* - *Quantité* (gros + détail) - *Prix unitaire* (pré-rempli depuis la designation) - *Type* : ligne normale, **BONUS**, ou **RETOUR** **Pas-à-pas** : 1. Cliquer sur **[Nouvelle facture de vente]**. 2. Choisir le client (ou DIVERS). 3. Choisir le mode de paiement (toggle ESPECE / CREDIT). 4. Ajouter les lignes : - Soit en sélectionnant manuellement chaque designation - Soit en activant le **scan code-barres** (la lecture **verrouille la quantité** lue — saisir manuellement si besoin de la modifier) 5. Pour chaque ligne, saisir la quantité ; le système calcule le total automatiquement. 6. (Optionnel) Appliquer une **réduction globale** dans la plage autorisée. 7. (Optionnel) Marquer une ligne comme **BONUS** ou **RETOUR**. 8. Vérifier les totaux. 9. Valider. ### 2. Validation : effets simultanés - **Décrément du stock** en FIFO automatique sur plusieurs lots si nécessaire (sortie côté `04-STOCK.md`). - **Si paiement ESPECE / OM / MOMO** : alimentation immédiate de la caisse → `07-FINANCES.md`. - **Si paiement CREDIT** : création d'une **créance** → `08-OBJECTIFS-RISTOURNES.md` § D. - **Si lignes BONUS présentes** : génération automatique d'une **instance** liée. - **Si lignes RETOUR présentes** : réinjection au stock (création/incrément de lot). ### 3. Règles spécifiques - **Réduction verrouillée** : si le client a l'option *Achète au prix d'achat* activée (voir `03-CLIENTS-FOURNISSEURS.md` § A.2), la réduction est désactivée et le prix de vente force le prix d'achat HT. - **FIFO multi-lots** : si la quantité demandée dépasse le lot le plus ancien, l'application répartit automatiquement sur plusieurs lots. - **Scan code-barres** : la quantité scannée est verrouillée par défaut (anti-erreur de saisie). ### 4. Modification d'une facture validée Possible tant que la facture n'a pas franchi certains seuils (livraison, retour). Voir `documentation/regles_suppression.md`. ### 5. Suppression Voir section **D. Factures supprimées** ci-dessous. ### 6. Voir le détail Cliquer sur une facture → modale `FactureVenteDetailModal` : en-tête, lignes, totaux, statut de livraison, statut de règlement. --- ## B. Feuille de route (tournée de livraison) ### Finalité Regrouper plusieurs factures de vente à livrer dans une tournée organisée, avec calcul d'itinéraire optimisé (OSRM) et suivi GPS du véhicule en temps réel. ### Accès Menu **Ventes → Feuilles de route**. ### Prérequis - Factures de vente validées non encore affectées - Véhicule actif avec IMEI fonctionnel → `03-CLIENTS-FOURNISSEURS.md` § E ### Opérations possibles 1. Créer une feuille de route 2. Ajouter des factures à la feuille 3. Sélectionner le véhicule et le livreur 4. Calculer l'itinéraire optimisé 5. Démarrer la tournée 6. Suivre la livraison en temps réel 7. Confirmer la livraison de chaque facture 8. Clôturer la feuille de route 9. Supprimer (selon règles) ### Pas-à-pas — Créer une feuille de route 1. Cliquer sur **[Nouvelle feuille de route]** (modale `FeuilleRouteModal`). 2. Sélectionner le **véhicule** (parmi ceux actifs). 3. Sélectionner le **livreur** (sous-compte habilité). 4. Cocher les **factures** à inclure dans la tournée. 5. (Optionnel) Réorganiser l'ordre de livraison. 6. Cliquer sur **[Calculer l'itinéraire]** — l'application interroge **OSRM** pour proposer un parcours optimal. 7. Valider — les factures sélectionnées passent à l'état `feuille_route=true`. ### Pas-à-pas — Suivre une livraison 1. Ouvrir la feuille de route active. 2. Le **GPS du véhicule** (IMEI) est polling toutes les 3 secondes — position affichée sur la carte. 3. Itinéraire restant affiché en temps réel. ### Pas-à-pas — Confirmer la livraison d'une facture 1. Dans la modale `FeuilleRouteLivraisonModal`, sélectionner la facture livrée. 2. Cliquer sur **[Confirmer la livraison]**. 3. L'application envoie un `PATCH /api/feuilles-route/{id}/livrer/`. 4. La facture passe à l'état **livrée** ; un marqueur est ajouté à `facture_livree[]`. ### Règle de non-suppression (N5-09) Une facture intégrée dans une **feuille de route** ne peut plus être supprimée directement — il faut d'abord la retirer de la feuille de route. --- ## C. Embarquement (chargement véhicule) ### Finalité Vérifier et confirmer le chargement physique des marchandises dans le véhicule avant le départ d'une tournée. ### Accès Menu **Ventes → Embarquement**. ### Prérequis - Feuille de route créée - Véhicule sélectionné ### Opérations possibles 1. Créer un embarquement à partir d'une feuille de route 2. Lister les designations à embarquer (totaux consolidés par produit) 3. Confirmer le chargement 4. Voir le détail d'une instance associée (modale `InstanceDetailModal`) ### Pas-à-pas 1. Ouvrir le module **Embarquement**. 2. Sélectionner la **feuille de route** concernée. 3. Vérifier la liste des designations et quantités totales à charger. 4. Valider physiquement chaque ligne (case à cocher ou contrôle visuel). 5. Confirmer l'embarquement. ### Lien avec les instances Si la feuille de route inclut des factures avec lignes **BONUS**, les instances générées sont visibles ici pour suivi des écarts entre prévu et livré. --- ## D. Factures supprimées (annulation) ### Finalité Consulter les factures qui ont été annulées/supprimées. ### Accès Menu **Ventes → Factures supprimées**. ### Règles de suppression (extrait de `documentation/regles_suppression.md`) Une facture est **non supprimable** si : - **Règle N5-08** : une opération de **RetourColis acheteur** y est rattachée - **Règle N5-09** : elle est incluse dans une **feuille de route** Dans ces cas, il faut **annuler** l'opération aval d'abord (retour colis ou feuille de route), puis tenter à nouveau. ### Pas-à-pas — Supprimer une facture 1. Depuis la liste des factures de vente, sélectionner la ligne. 2. Cliquer sur **[Supprimer]**. 3. Confirmer. 4. Si bloqué, message d'erreur indiquant la règle violée — résoudre la dépendance. ### Effets de la suppression - **Réinjection au stock** des quantités sorties. - **Annulation de la créance** (si paiement CREDIT) ou **retrait de caisse** (si paiement ESPECE). - **Trace conservée** dans `Factures supprimées` pour audit. --- ## E. Modes de paiement Les modes effectivement disponibles dépendent de la configuration du **sous-compte** (`paiement[]` — voir `02-PARAMETRAGE.md` § F) : | Mode | Sens | Impact financier | |------|------|------------------| | **ESPECE** | Paiement cash | Alimente directement la caisse (`07-FINANCES.md`) | | **OM** (Orange Money) | Mobile money — Orange | Alimente une caisse mobile money | | **MOMO** (Mobile Money) | Mobile money — opérateur générique | Alimente une caisse mobile money | | **CREDIT** | Vente à crédit | Crée une **créance** (`08-OBJECTIFS-RISTOURNES.md`) | Voir détails dans `documentation/modepaiement.md`. --- ## F. Cas particuliers ### Vente à un client libre (DIVERS) 1. À la création d'une facture, choisir **DIVERS** comme client. 2. Saisir éventuellement le nom de l'acheteur dans le champ libre. 3. Le reste de la facture suit le processus standard. ### Ligne BONUS (produit offert) - À l'ajout d'une ligne, cocher **BONUS**. - Le montant de la ligne n'entre pas dans le total facturé. - Le stock est néanmoins décrémenté. - Une **instance** est automatiquement créée pour suivi (cf. `documentation/instance.md`). ### Ligne RETOUR (réinjection au stock) - À l'ajout d'une ligne, sélectionner **RETOUR**. - La quantité saisie est **ajoutée** au stock (au lieu d'être retirée). - Le montant peut être soustrait du total (avoir). --- ## Chaîne complète d'une vente livrée ``` Création facture (ESPECE ou CREDIT) ↓ [Si BONUS] Génération automatique d'une instance ↓ Affectation à une feuille de route (état : feuille_route=true) ↓ Embarquement (vérification physique du chargement) ↓ Tournée — suivi GPS temps réel (polling 3s) + itinéraire OSRM ↓ Confirmation de livraison facture par facture (PATCH livrer/) ↓ [Si paiement CREDIT] Créance à recouvrer → 07/08 [Si paiement ESPECE/OM/MOMO] Caisse alimentée → 07 ``` --- ## Liens avec autres modules | Effet | Module concerné | |-------|----------------| | **Décrément du stock** (FIFO) | `04-STOCK.md` | | **Encaissement** ESPECE/OM/MOMO | `07-FINANCES.md` (caisse) | | **Création de créance** sur CREDIT | `08-OBJECTIFS-RISTOURNES.md` § D | | **Calcul de ristourne** acquise | `08-OBJECTIFS-RISTOURNES.md` | | **Sélection du véhicule** | `03-CLIENTS-FOURNISSEURS.md` § E | | **Sélection du client** | `03-CLIENTS-FOURNISSEURS.md` § A | | **TVA & PSA** sur les lignes | `02-PARAMETRAGE.md`, `03-CLIENTS-FOURNISSEURS.md` | | **Suivi objectifs de vente** | `08-OBJECTIFS-RISTOURNES.md` | | **Annulation / Retour** | Règles N5-08 / N5-09 (cf. doc règles) | --- # 06 — Achats > **Quand utiliser ce module ?** Pour commander auprès des fournisseurs (précommande), enregistrer les arrivées effectives de marchandise (facture d'achat), et alimenter le stock de l'entreprise. ## Concepts clés | Notion | Définition | |--------|------------| | **Précommande** | Intention d'achat formalisée, antérieure à la réception. Sert à organiser une commande, partager avec le fournisseur, et préparer la conversion en facture. | | **Facture d'achat** | Enregistrement de la réception effective : impacte le stock et crée une dette envers le fournisseur. | | **Mode classique** | Calcul standard à partir des taux du fournisseur sélectionné. | | **Mode lien commercial** | Calcul utilisant les taux et données du **lien commercial** (taux TVA et PSA propres au lien, ristourne paramétrable). Voir `03-CLIENTS-FOURNISSEURS.md` § D. | | **Scan code-barres** | Saisie rapide des lignes par lecture d'étiquettes via la caméra. | | **AccountSettings** | Réglages avancés liés au compte fournisseur (overrides de designations, catégories, emballages). | --- ## Prérequis communs Avant tout achat : - **Journée ouverte** → `09-JOURNEE.md` - **Fournisseur** existant → `03-CLIENTS-FOURNISSEURS.md` - **Designations** créées et rattachées au fournisseur → `02-PARAMETRAGE.md` - **TVA** paramétrée → `02-PARAMETRAGE.md` - (Si pertinent) **PSA** paramétré → `03-CLIENTS-FOURNISSEURS.md` § C - (Si pertinent) **Lien commercial** établi → `03-CLIENTS-FOURNISSEURS.md` § D - Sous-compte autorisé selon permissions --- ## A. Précommande ### Finalité Formaliser une intention de commande avant la livraison physique. La précommande sert de support de validation avec le fournisseur et de modèle pour la facture finale. ### Accès Menu **Achats → Précommandes**. ### Cycle de vie 1. Création → état **brouillon** 2. Validation → état **en attente de réception** 3. Conversion en facture d'achat → état **traitée** 4. (Sinon) Annulation / suppression ### Opérations possibles 1. Créer une précommande 2. Ajouter / modifier / supprimer des lignes 3. Modifier l'en-tête (fournisseur, mode, date prévue) 4. Valider une précommande 5. Convertir en facture d'achat 6. Supprimer une précommande 7. Imprimer / exporter en PDF ### 1. Créer une précommande **Champs requis** : - *Fournisseur* - *Entrepôt* de destination - *Date prévue de réception* - *Mode* : `classique` ou `lien_commercial` - *Lignes* : pour chaque ligne — designation, quantité, prix unitaire HT (pré-rempli depuis la fiche designation), taxable (auto) **Pas-à-pas** : 1. Cliquer sur **[Nouvelle précommande]**. 2. Sélectionner le fournisseur, l'entrepôt, la date prévue. 3. Choisir le mode de calcul. 4. Ajouter les lignes : pour chaque designation, saisir la quantité (gros / détail) et ajuster le prix si besoin. 5. Valider. ### 2. Modifier Tant que la précommande n'est pas convertie, toutes les modifications sont possibles (ajout/suppression de lignes, changement de quantités, prix). ### 3. Convertir en facture d'achat Voir section dédiée **§ Conversion** ci-dessous. ### 4. Supprimer Possible tant que la précommande n'est pas convertie. La suppression efface l'enregistrement (pas d'historique conservé pour les brouillons). --- ## B. Facture d'achat ### Finalité Enregistrer une **réception effective** de marchandise. Trois effets simultanés : 1. **Alimentation du stock** : création d'un ou plusieurs lots dans l'entrepôt destinataire avec provenance `achat`. 2. **Création d'une dette fournisseur** : le montant TTC dû s'inscrit dans le module finances (voir `07-FINANCES.md` § F). 3. **Traçabilité financière** : le coût d'acquisition (PUG calculé) est conservé sur chaque lot. ### Accès Menu **Achats → Factures d'achat**. ### Opérations possibles 1. Créer une facture d'achat depuis zéro 2. Créer une facture d'achat à partir d'une précommande 3. Ajouter des lignes (manuellement ou par scan code-barres) 4. Modifier l'en-tête (mode, fournisseur, entrepôt, dates) 5. Saisir les frais annexes (emballage, applicatif) 6. Valider la facture (impact stock + dette) 7. Voir le détail d'une facture validée 8. Modifier / supprimer (selon règles) 9. Exporter (PDF / Excel) 10. Régler les paramètres de compte fournisseur (AccountSettings) ### 1. Créer une facture d'achat (depuis zéro) **Champs requis** : - *Fournisseur* - *Entrepôt* de destination - *Date* de facture - *Mode de calcul* : `classique` ou `lien_commercial` - *Numéro fournisseur* (référence externe — optionnel) - *Lignes* : designation, quantité, prix unitaire HT, taxable **Pas-à-pas** (interface PC en 3 colonnes : sélection / lignes / récap) : 1. Cliquer sur **[Nouvelle facture d'achat]**. 2. Sélectionner le **fournisseur**. 3. Choisir le **mode** (classique / lien commercial). 4. Sélectionner l'**entrepôt** destinataire et la **date**. 5. Ajouter les lignes : - Soit en sélectionnant manuellement chaque designation - Soit en activant le **scan code-barres** (caméra) 6. Pour chaque ligne, saisir/ajuster : - *Quantité* - *Prix d'achat HT* (pré-rempli depuis la designation) - Les valeurs de TVA, PSA, emballages et éléments catégorie se calculent automatiquement 7. Vérifier le **récapitulatif** (totaux HT, TVA, PSA, TTC, total général). 8. Valider. ### 2. Créer à partir d'une précommande Voir section **§ Conversion** ci-dessous. ### 3. Ajouter des lignes via scan code-barres 1. Cliquer sur **[Scan]** (icône caméra) — l'application active la **webcam** (voir `CodebarModal`). 2. Présenter le code-barres devant la caméra — la designation correspondante est ajoutée. 3. Saisir la quantité (le focus passe automatiquement). 4. Continuer ou fermer le scanner. ### 4. Valider La validation déclenche : - Création d'autant de **lots** que de lignes, dans l'entrepôt destinataire. - Inscription du **PUG** calculé sur chaque lot (formule en § C ci-dessous). - Création de la **dette fournisseur** (montant TTC + frais). ### 5. Détail d'une facture validée Cliquer sur une ligne dans la liste pour ouvrir le détail (modale `FactureAchatDetailModal`) : récap, lignes, totaux, état du règlement. ### 6. Suppression Possible uniquement selon les règles métier (cf. `documentation/regles_suppression.md`). Une facture validée a impacté le stock et la dette — la suppression doit donc inverser ces effets. ### 7. AccountSettings (réglages avancés du compte fournisseur) Modale `AccountSettingsModal` qui permet de définir des **overrides** au niveau du compte : - Overrides de **designations** (nom, prix, code propre au compte) - Overrides de **catégories** (éléments propres) - Overrides d'**emballages** - Overrides de table de ristourne (en mode lien commercial) Utile quand un fournisseur applique des conditions spécifiques différentes du catalogue standard. --- ## C. Calcul du coût d'achat (PUG / valorisation) Deux modes selon le contexte de la facture. ### Mode classique Données utilisées : - **TVA** : taux du fournisseur - **PSA** : taux du fournisseur - **Emballage** : prix d'achat HT de l'emballage de la designation - **Éléments de catégorie** : éléments override (compte) + éléments super (catalogue) Calcul par ligne : ``` montantHT = quantité × prix_achat_HT montantTVA = montantHT × (TVA / 100) si taxable montantPSA = montantHT × (PSA / 100) si taxable montantTTC = montantHT + montantTVA + montantPSA ``` Calculs des éléments complémentaires (unitaires, multipliés par la quantité au groupement) : - **Épargnes** : éléments de catégorie de type `epargne` - **Applicatifs** : éléments de catégorie de type `applicatif` (signe `+` ou `−`) - **Emballages** : si l'emballage a un prix d'achat HT, on l'ajoute (avec signe `+` consignation ou `−` retour) Totaux de la facture : ``` totalHT = Σ montantHT totalTVA = Σ montantTVA totalPSA = Σ montantPSA totalTTC = totalHT + totalTVA + totalPSA totalEmballages = Σ emballages_groupés totalApplicatifs = Σ applicatifs_groupés TOTAL = totalTTC + totalEmballages + totalApplicatifs ``` ### Mode lien commercial Différences clés : - **TVA** et **PSA** viennent du **lien commercial** (pas du fournisseur) - Les designations utilisées sont les **overrides du lien** (designations propres au partenariat) - Une **table de ristourne** est appliquée (override du lien) - Les emballages utilisent leur **prix de vente HT** (pas le prix d'achat) Le reste du calcul suit la même logique que le mode classique. ### Points pratiques - Le **PUG** ainsi calculé devient le coût unitaire du lot dans le stock (voir `04-STOCK.md`). - La valeur de stock = Σ (PUG × quantité_restante par lot). - Tout ajustement de prix après validation ne se répercute **pas** rétroactivement. --- ## D. Conversion Précommande → Facture d'achat ### Qui peut convertir ? Tout sous-compte ayant la permission de saisie de facture d'achat. ### Pas-à-pas 1. Depuis la liste des précommandes (menu **Achats → Précommandes**), sélectionner la précommande à convertir. 2. Cliquer sur **[Convertir en facture]** (modale `PrecommandeConvertModalPC` / Tablet / Mobile). 3. Vérifier l'en-tête : fournisseur, entrepôt, mode de calcul. 4. Ajuster les **lignes** : quantités effectivement reçues peuvent différer des prévues (saisir les vraies). 5. Ajuster les **prix** si l'arrivée diffère du prévisionnel. 6. Vérifier les totaux. 7. Valider — la facture d'achat est créée, la précommande passe en état **traitée**. ### Règles - Toutes les lignes de la précommande sont reprises ; les lignes à quantité 0 ne créent pas de stock. - Une précommande convertie ne peut plus être modifiée. - Le numéro de la précommande reste référencé sur la facture créée. --- ## E. Scan code-barres / QR code ### Finalité Accélérer la saisie des lignes lors d'un achat (notamment lors d'une réception physique avec étiquettes). ### Activation - Bouton **[Scan]** dans l'écran de création de facture d'achat. - Modale `CodebarModal` qui ouvre la **webcam** (composant `react-webcam`). - Le code lu identifie automatiquement la designation correspondante. ### Export - Les listes (factures, précommandes) sont exportables en **PDF** et **Excel**. --- ## Indicateurs et codes couleur | Élément | Couleur | |---------|---------| | Provenance `achat` (lots issus de cette facture) | vert (voir `04-STOCK.md`) | | Statut « brouillon » d'une précommande | gris | | Statut « validé » | bleu | | Statut « traité » | vert | | Mode classique | neutre | | Mode lien commercial | accent (signale qu'un partenariat s'applique) | --- ## Liens avec autres modules | Effet | Module concerné | |-------|----------------| | La facture validée **alimente le stock** | `04-STOCK.md` (nouveaux lots, provenance `achat`) | | La facture validée **crée une dette fournisseur** | `07-FINANCES.md` (§ F — Règlements fournisseurs) | | Les fournisseurs et liens commerciaux viennent de | `03-CLIENTS-FOURNISSEURS.md` | | TVA, PSA, devise, désignations | `02-PARAMETRAGE.md` | | Suivi des objectifs d'achat | `08-OBJECTIFS-RISTOURNES.md` | --- # 07 — Finances > **Quand utiliser ce module ?** Pour piloter la trésorerie : suivre la caisse, encaisser les ventes, payer les fournisseurs, enregistrer les dépenses, alimenter ou vider les comptes, et consulter les états financiers consolidés. ## Concepts clés | Notion | Définition | |--------|------------| | **Sous-compte** | Compte opérationnel rattaché à un entrepôt (voir `02-PARAMETRAGE.md` § F). Porte les soldes financiers. | | **Mode de paiement** | Canal financier : `ESPECE`, `OM` (Orange Money), `MOMO` (Mobile Money), `CREDIT`. Chaque sous-compte a un solde **ventilé par mode**. | | **Caisse** | Solde immédiatement disponible du sous-compte (par mode de paiement). | | **Versement** | Entrée d'argent (encaissement client, dépôt). | | **Retrait** | Sortie d'argent (prélèvement, transfert vers tiers). | | **Approvisionnement** | Entrée d'argent depuis une autre source interne (ex. transfert d'un autre sous-compte). | | **Dépense** | Sortie pour charge, rattachée à une **famille de dépense** (voir `02-PARAMETRAGE.md` § G). | | **Règlement fournisseur (FinFournisseurs)** | Paiement d'une dette envers un fournisseur, issue d'une facture d'achat (voir `06-ACHATS.md`). | | **État financier** | Rapport synthétique des mouvements sur une période. | ### Règle d'or **Aucun mode de paiement d'un sous-compte ne peut devenir négatif.** Avant toute sortie (retrait, dépense, règlement fournisseur), l'application vérifie que le solde du mode concerné est suffisant. ### Restriction d'accès Seuls les utilisateurs de type **sous-compte** peuvent **créer** ou **supprimer** des opérations financières. Les autres profils ont un accès en lecture. --- ## Prérequis communs - **Journée ouverte** → `09-JOURNEE.md` - **Sous-compte** actif et connecté → `02-PARAMETRAGE.md` § F - (Pour dépenses) **Famille de dépense** créée → `02-PARAMETRAGE.md` § G - (Pour règlements fournisseurs) **Facture d'achat** validée → `06-ACHATS.md` --- ## A. Caisse ### Finalité Visualiser à tout moment le **solde disponible** du sous-compte, ventilé par mode de paiement. C'est l'écran de pilotage immédiat de la trésorerie. ### Accès Menu **Finances → Caisse**. ### Opérations possibles 1. Consulter le **solde par mode de paiement** (ESPECE, OM, MOMO, CREDIT) 2. Voir l'historique des mouvements de la journée 3. Filtrer par mode 4. Filtrer par période 5. Exporter en PDF / Excel ### Deux variantes de modale - **Caisse sous-compte** (`caisse_souscompte`) : vue centrée sur le sous-compte connecté. - **Caisse entrepôt** (`caisse_entrepot`) : vue consolidée sur l'entrepôt (tous sous-comptes confondus). ### Pas-à-pas — Consulter la caisse 1. Ouvrir le module **Caisse**. 2. La page affiche directement les soldes par mode pour la journée en cours. 3. Cliquer sur un mode pour filtrer les mouvements associés. 4. (Optionnel) Changer la période via le calendrier. --- ## B. Versement ### Finalité Enregistrer une **entrée d'argent** : encaissement client (hors vente immédiate déjà saisie), dépôt initial, remboursement reçu, etc. ### Accès Menu **Finances → Versement**. ### Opérations possibles 1. Créer un versement 2. Consulter la liste des versements 3. Supprimer un versement (sous-compte uniquement) ### Champs requis - *Mode de paiement* (sélection : ESPECE / OM / MOMO / CREDIT) - *Montant* - *Libellé* (description courte) - *Client* ou tiers concerné (optionnel — si rattachement à une créance, voir `08-OBJECTIFS-RISTOURNES.md` § D) - *Date* ### Pas-à-pas — Créer un versement 1. Cliquer sur **[Nouveau versement]** (modale `VersementModal`). 2. Sélectionner le **mode de paiement**. 3. Saisir le **montant** et le **libellé**. 4. (Optionnel) Rattacher à un **client** ou à une **créance** existante. 5. Valider — le solde du mode concerné est crédité. ### Effets - Solde du sous-compte crédité sur le mode choisi. - Si rattaché à une créance : la créance est marquée soldée ou partiellement soldée. --- ## C. Dépense ### Finalité Enregistrer une **charge** : carburant, loyer, fournitures, frais divers. Catégorisée par famille pour le suivi analytique. ### Accès Menu **Finances → Dépense**. ### Prérequis spécifique - **Famille de dépense** créée → `02-PARAMETRAGE.md` § G - Solde suffisant sur le mode choisi ### Opérations possibles 1. Créer une dépense 2. Lister les dépenses 3. Filtrer par famille / période 4. Supprimer (sous-compte uniquement) ### Champs requis - *Famille de dépense* (sélection) - *Mode de paiement* utilisé - *Montant* - *Libellé* (description précise) - *Date* ### Pas-à-pas — Créer une dépense 1. Cliquer sur **[Nouvelle dépense]** (modale `DepenseModal`). 2. Sélectionner la **famille** (ex. Carburant, Loyer, Fournitures). 3. Choisir le **mode de paiement** utilisé. 4. Saisir le **montant** et le **libellé**. 5. Valider — l'application vérifie que le mode a un solde suffisant, sinon refus. --- ## D. Retrait ### Finalité Enregistrer une **sortie d'argent** sans contrepartie de dépense classifiée : prélèvement personnel autorisé, transfert vers une banque, sortie de caisse pour change… ### Accès Menu **Finances → Retrait**. ### Opérations possibles 1. Créer un retrait 2. Lister les retraits 3. Supprimer (sous-compte uniquement) ### Champs requis - *Mode de paiement* - *Montant* - *Libellé* - *Bénéficiaire* (optionnel) - *Date* ### Pas-à-pas — Créer un retrait 1. Cliquer sur **[Nouveau retrait]** (modale `RetraitModal`). 2. Sélectionner le mode, saisir montant et libellé. 3. Valider — solde décrémenté ; refus si insuffisant. ### Différence Retrait vs Dépense - **Retrait** : sortie d'argent **non comptabilisée comme charge** (ex. mise à disposition). - **Dépense** : sortie **liée à une charge** d'exploitation, classifiée pour le suivi analytique. --- ## E. Approvisionnement ### Finalité Alimenter un sous-compte/caisse depuis une autre source interne (ex. apport en espèces du gérant, transfert entre sous-comptes). ### Accès Menu **Finances → Approvisionnement**. ### Opérations possibles 1. Créer un approvisionnement 2. Lister les approvisionnements 3. Supprimer (sous-compte uniquement) ### Champs requis - *Source* (sous-compte source, ou source externe) - *Mode de paiement* - *Montant* - *Libellé* - *Date* ### Pas-à-pas 1. Cliquer sur **[Nouvel approvisionnement]** (modale `ApprovisionnemantModal`). 2. Indiquer la source. 3. Choisir le mode, saisir montant et libellé. 4. Valider — solde du mode crédité. ### Différence Approvisionnement vs Versement - **Versement** : encaissement externe (client, tiers). - **Approvisionnement** : transfert **interne** entre sources de l'entreprise. --- ## F. Règlements fournisseurs (FinFournisseurs) ### Finalité Solder, totalement ou partiellement, une dette envers un fournisseur née d'une **facture d'achat validée** (voir `06-ACHATS.md`). ### Accès Menu **Finances → Règlements fournisseurs**. ### Prérequis - Facture d'achat validée avec dette en cours - Solde suffisant sur le mode choisi - (Voir `documentation/SELECTION_FOURNISSEUR_FIN.md` pour la logique de sélection) ### Opérations possibles 1. Sélectionner un fournisseur 2. Lister ses dettes en cours 3. Saisir un règlement (partiel ou total) 4. Lier le règlement à une ou plusieurs factures 5. Imprimer un reçu (PDF) 6. Supprimer un règlement (sous-compte uniquement) ### Champs requis - *Fournisseur* - *Facture(s)* à régler (sélection multiple possible) - *Mode de paiement* - *Montant* - *Libellé* / référence - *Date* ### Pas-à-pas 1. Cliquer sur **[Nouveau règlement fournisseur]** (modale `FinFournisseursModal`). 2. Sélectionner le **fournisseur**. 3. Cocher les **factures** à solder (totalement ou partiellement). 4. Choisir le **mode de paiement** et saisir le **montant**. 5. Valider — solde du sous-compte décrémenté ; dette du fournisseur ajustée. ### Effets - Décrément du sous-compte sur le mode choisi. - Décrément du **passif fournisseur** (dette restante). - Si la dette est entièrement réglée, la facture est marquée soldée. --- ## G. États financiers ### Finalité Consulter un **rapport synthétique** des mouvements financiers (entrées / sorties / soldes) sur une période donnée. ### Accès Menu **Finances → États**. ### Statut actuel > **À préciser avec l'équipe métier / dev** : l'écran `Etats` est en cours de finalisation côté backend. Les colonnes visibles côté UI sont **libellé**, **montant**, **date**, **type**. ### Opérations possibles (cible) 1. Choisir une **période** (calendrier) 2. Choisir un **entrepôt** ou **sous-compte** 3. Choisir un **mode de paiement** 4. Voir les **agrégats** par mode et par famille de dépense 5. Exporter (PDF / Excel) ### Indicateurs reconstruisibles aujourd'hui À partir des écrans de Caisse, Versement, Dépense, Retrait, Approvisionnement et Règlements, il est possible de reconstituer manuellement : - **Total des encaissements** sur la période (Versements + Ventes ESPECE/OM/MOMO de `05-VENTES.md`) - **Total des sorties** (Dépenses + Retraits + Règlements fournisseurs) - **Solde net** (Encaissements − Sorties) - **Répartition par famille de dépense** - **Dettes fournisseurs restantes** --- ## Endpoints internes (référence technique) | Action | Endpoint | |--------|----------| | Lister | `GET /api/finance/?key=&mode=` (modes combinables avec `|`) | | Créer | `POST /api/finance/create/` | | Supprimer (unitaire) | `DELETE /api/finance//delete/` | | Supprimer (en lot) | `DELETE /api/finance/delete/` | > Le hook `useFinance` gère la liste, et `useFinanceModal` orchestre la création / validation / soumission de toutes les modales financières (caisse, versement, dépense, retrait, approvisionnement, règlement). --- ## Liens avec autres modules | Flux | Module concerné | |------|----------------| | Une **vente ESPECE / OM / MOMO** alimente la caisse | `05-VENTES.md` → `07-FINANCES.md` (A, B) | | Une **vente CREDIT** crée une créance | `05-VENTES.md` → `08-OBJECTIFS-RISTOURNES.md` | | Un **règlement de créance client** = versement | `08-OBJECTIFS-RISTOURNES.md` § D → `07-FINANCES.md` § B | | Une **facture d'achat** crée une dette fournisseur | `06-ACHATS.md` → `07-FINANCES.md` § F | | Une **dépense** s'appuie sur une famille | `02-PARAMETRAGE.md` § G → `07-FINANCES.md` § C | | Un **sous-compte** porte les soldes | `02-PARAMETRAGE.md` § F → tout le module | | Le calendrier des **journées** filtre les états | `09-JOURNEE.md` | --- ## Bonnes pratiques 1. **Faire le pointage de caisse en fin de journée** : avant la clôture, vérifier que les soldes ESPECE / OM / MOMO correspondent au physique. 2. **Catégoriser systématiquement les dépenses** par famille pour avoir un suivi analytique exploitable. 3. **Ne pas confondre Dépense et Retrait** : la dépense documente une charge, le retrait documente une sortie sans imputation analytique. 4. **Solder les dettes fournisseurs rapidement** pour éviter l'accumulation et conserver de bonnes relations commerciales. 5. **Approvisionner avant d'opérer** : si le solde d'un mode est nul, créer un approvisionnement avant la dépense. --- # 08 — Objectifs, Ristournes & Créances client > **Quand utiliser ce module ?** Pour piloter la performance commerciale : fixer des objectifs aux fournisseurs et aux clients, paramétrer les remises automatiques (ristournes) appliquées en vente, et suivre les sommes dues par les clients. ## Concepts clés | Notion | Définition | |--------|------------| | **Objectif fournisseur** | Engagement chiffré (volume ou pourcentage) sur achats ou ventes liés à un fournisseur, sur une période. | | **Objectif client** | Cible commerciale fixée pour un client sur une période, par entrepôt. | | **Règle de ristourne** | Triplet (catégorie produit + PSA + montant) qui définit une remise automatique. | | **Ristourne acquise** | Montant cumulé par un client donné selon les règles applicables. | | **Créance** | Montant dû par un client suite à une vente à crédit non réglée. | --- ## A. Objectifs ### A.1 Objectif fournisseur #### Finalité Définir un engagement chiffré envers un fournisseur (par exemple : « acheter 1 000 cartons sur 30 jours ») et suivre l'avancement en temps réel. #### Accès Menu **Objectifs → Fournisseurs**. #### Prérequis - Fournisseur existant → `03-CLIENTS-FOURNISSEURS.md` - (Si mode catégorie) Catégories paramétrées → `02-PARAMETRAGE.md` - (Si mode désignation) Designations paramétrées → `02-PARAMETRAGE.md` #### Opérations possibles 1. Créer un objectif fournisseur 2. Modifier un objectif 3. Fermer / rouvrir un objectif 4. Supprimer un objectif 5. Suivre l'avancement (temps réel via WebSocket) #### Champs requis (modale riche) - *Fournisseur* - *Période* en jours (par défaut **30**) - *Statut* : `ouvert` ou `fermé` - *Mode* : - **Catégorie** : applique l'objectif à un ou plusieurs **segments** (groupes de catégories) - **Désignation** : applique l'objectif à une ou plusieurs **classes** (groupes de designations) - *Type* : `achat` ou `vente` - *Unité* : - `#` (quantité — ex. nombre de cartons) - `%` (pourcentage d'évolution) - *Cible chiffrée* (montant ou quantité selon unité) #### Pas-à-pas — Créer un objectif fournisseur 1. Cliquer sur **[Nouvel objectif fournisseur]**. 2. Sélectionner le **fournisseur**. 3. Choisir la **période** (jours) et le **statut initial**. 4. Choisir le **mode** (catégorie ou désignation) puis sélectionner les segments/classes concernés. 5. Choisir le **type** (achat ou vente) et l'**unité** (`#` ou `%`). 6. Saisir la **cible**. 7. Valider. #### Suivi Les événements WebSocket `objectif.created` / `objectif.updated` / `objectif.deleted` rafraîchissent la liste automatiquement. L'avancement est calculé à partir des achats/ventes effectifs sur la période. --- ### A.2 Objectif client #### Finalité Fixer une cible commerciale par client sur une période et un entrepôt donné. #### Accès Menu **Objectifs → Clients**. #### Prérequis - Client existant → `03-CLIENTS-FOURNISSEURS.md` - Entrepôt → `02-PARAMETRAGE.md` #### Opérations possibles 1. Créer un objectif client 2. Modifier un objectif 3. Suivre l'avancement 4. Supprimer un objectif > **Restriction** : la **suppression** d'un objectif client est réservée aux comptes **sous-compte** (selon paramétrage des permissions — voir `02-PARAMETRAGE.md` § F). #### Champs requis (modale simplifiée) - *Client* - *Entrepôt* - *Période* - *Statut* : `ouvert` ou `fermé` - *Cible* #### Pas-à-pas 1. Cliquer sur **[Nouvel objectif client]**. 2. Sélectionner client + entrepôt. 3. Définir période et cible. 4. Valider. --- ## B. Ristournes (règles) ### Finalité Définir des **règles de remise automatique** qui s'appliqueront lors des ventes ou seront cumulées par client. Une règle est un triplet **catégorie + PSA + montant**. ### Accès Menu **Paramètres → Ristournes**. ### Prérequis - Catégories paramétrées → `02-PARAMETRAGE.md` - PSA paramétrés → `03-CLIENTS-FOURNISSEURS.md` § C ### Opérations possibles 1. Créer une règle (3 modes au choix) 2. Modifier une règle 3. Supprimer une règle 4. Importer en masse (Excel ou STORES) ### Trois modes de création 1. **Manuel** : saisie directe via le formulaire (catégorie + PSA + montant). 2. **Import Excel** via **drag & drop** : déposer un fichier Excel conforme dans la zone d'import. 3. **Import depuis STORES** : sélectionner depuis le catalogue central, avec filtre par PSA et recherche. ### Champs d'une règle - *Catégorie* de produit - *PSA* applicable - *Montant* (en devise active, par unité) ### Pas-à-pas — Création manuelle 1. Cliquer sur **[Nouvelle règle de ristourne]**. 2. Sélectionner la catégorie et le PSA. 3. Saisir le montant. 4. Valider. ### Pas-à-pas — Import Excel 1. Préparer un fichier Excel avec les colonnes attendues (catégorie, PSA, montant). 2. Glisser-déposer le fichier dans la zone d'import. 3. Vérifier l'aperçu puis confirmer. ### Pas-à-pas — Import STORES 1. Cliquer sur **[Importer STORES]**. 2. Filtrer par PSA ou rechercher par nom. 3. Cocher les règles à importer. 4. Confirmer. > **Restriction** : les comptes **sous-compte** ont un **accès lecture seule** aux règles de ristourne (pas de création/modification/suppression). --- ## C. Ristournes appliquées par client (ClientRistourne) ### Finalité Consulter et suivre le **cumul des ristournes acquises** par chaque client à partir des règles paramétrées et de l'historique d'achat. ### Accès Menu **Clients → Ristournes**. ### Colonnes affichées - Client - Désignation concernée - Taux ou montant unitaire - Montant total cumulé - Date d'acquisition ### Filtre - Calendrier par journée ou plage de dates ### Opérations possibles 1. Consulter le cumul par client 2. Filtrer par période 3. Déclencher un **règlement** de la ristourne accumulée (déduction sur prochaine facture ou versement direct — voir `07-FINANCES.md`) > **Note** : l'écran est présent ; la finalisation de la connexion aux ventes effectives peut être en cours selon l'environnement. --- ## D. Créances client (ClientCreance) ### Finalité Suivre les sommes dues par les clients suite à des ventes à crédit. Centralise les montants impayés et les échéances. ### Accès Menu **Clients → Créances**. ### Colonnes affichées - Client - Montant dû - Échéance - Statut (à recouvrer / en retard / soldée) - Date de création ### Opérations possibles 1. Lister les créances d'un client 2. Filtrer par période (calendrier par journée) 3. Ajouter manuellement une créance via **[+ Ajouter]** (cas administratif) 4. Régler une créance — l'opération de règlement se fait depuis le module **Versement** (voir `07-FINANCES.md`) ### Cycle de vie d'une créance 1. **Création** : automatique lors d'une vente à crédit (voir `05-VENTES.md`). 2. **Suivi** : statut « à recouvrer » → « en retard » si dépassement échéance. 3. **Règlement** : un **versement** rattaché à la créance la solde (partiel ou total) — voir `07-FINANCES.md`. 4. **Solde** : statut « soldée », conservée pour historique. > **Note** : l'écran est présent ; la connexion automatique aux ventes à crédit peut être en cours selon l'environnement. --- ## Liens avec autres modules | Action | Module concerné | |--------|----------------| | Une vente à crédit **crée une créance** | `05-VENTES.md` → `08-OBJECTIFS-RISTOURNES.md` (§ D) | | Le règlement d'une créance crée un **versement** | `08-OBJECTIFS-RISTOURNES.md` § D → `07-FINANCES.md` | | Les **objectifs** se mesurent contre les achats/ventes réels | `05-VENTES.md`, `06-ACHATS.md` | | Les **règles de ristourne** influent sur le prix de vente | `05-VENTES.md` (calcul ligne) | | Les fiches client/fournisseur viennent de | `03-CLIENTS-FOURNISSEURS.md` | | Les catégories et PSA viennent de | `02-PARAMETRAGE.md` et `03-CLIENTS-FOURNISSEURS.md` | --- ## Récapitulatif pratique - Pour qu'une **ristourne** s'applique : il faut une règle (catégorie + PSA + montant) **et** un client non marqué « hors ristourne » (voir `03-CLIENTS-FOURNISSEURS.md`). - Pour qu'un **objectif** s'actualise : il faut des **opérations effectives** (achat ou vente) sur la période, le fournisseur/client et la portée (catégorie/désignation) configurés. - Pour qu'une **créance** se solde : il faut un **versement** explicite rattaché — il n'y a pas d'extinction automatique. --- # 09 — Journée opérationnelle > **Quand utiliser ce module ?** La **journée** est l'unité de temps de pilotage de StoreFrontend. La quasi-totalité des opérations métier (ventes, achats, stock, finances) sont attachées à une journée ouverte. Il faut **ouvrir une journée** avant de pouvoir saisir quoi que ce soit ; il faut **la clôturer** en fin d'exploitation pour figer les états. ## Concepts clés | Notion | Définition | |--------|------------| | **Journée** | Session de travail datée et rattachée à un entrepôt, ouverte par un sous-compte. | | **Ouverture** | Action qui crée la journée et permet la saisie des opérations métier sur l'entrepôt. | | **Clôture** | Action qui ferme la journée et arrête les saisies. | | **Journée ouverte** | Une journée par entrepôt à la fois (champ `open=true`). | | **Profil sous-compte** | Seul profil habilité à **ouvrir / fermer** une journée. | ### Règles structurantes - Une **seule journée ouverte par entrepôt** à un instant donné. - L'**ouverture** et la **fermeture** sont réservées aux utilisateurs de type `sous_compte`. - Les profils **grossiste** et **client** ont une vue en consultation sur l'ensemble des journées. - Les changements d'état (ouverture / clôture) sont propagés en **temps réel** à tous les utilisateurs via WebSocket (`journe.created`, `journe.closed`). --- ## A. Ouvrir une journée ### Finalité Démarrer une session de travail sur un entrepôt. Toutes les opérations saisies seront rattachées à cette journée pour le pilotage et les états. ### Prérequis - Être connecté avec un sous-compte actif → `02-PARAMETRAGE.md` § F - L'entrepôt du sous-compte ne doit pas avoir de journée déjà ouverte ### Accès Menu **Journée** (icône calendrier). ### Pas-à-pas 1. Ouvrir le module **Journée**. 2. Vérifier qu'il n'y a pas de journée ouverte (indicateur visuel : aucune ligne avec **✓** sur la colonne *Ouverte*). 3. Cliquer sur le bouton **📅 Ouvrir la journée** (visible uniquement pour les sous-comptes). 4. Confirmer si demandé. 5. Un message de succès s'affiche ; la nouvelle ligne apparait dans le tableau avec : - *Ouverte* = date et heure de l'ouverture - *Fermée* = libellé `Ouverte` (en vert) - *État* = ✓ (vert) - *Entrepôt* = nom de l'entrepôt - *Sous-compte* = nom du sous-compte qui a ouvert ### Conséquences Tous les modules métier deviennent **opérationnels** : - Saisie des factures de vente et d'achat (`05-VENTES.md`, `06-ACHATS.md`) - Mouvements de stock : transferts, sorties, inventaire (`04-STOCK.md`) - Opérations financières : versements, dépenses, retraits, règlements (`07-FINANCES.md`) - Précommandes (`06-ACHATS.md`) - Embarquements et feuilles de route (`05-VENTES.md`) --- ## B. Consulter la journée en cours ### Finalité Voir l'état actuel des journées (par entrepôt), avec la journée ouverte mise en évidence. ### Accès Menu **Journée**. ### Informations affichées (colonnes du tableau) | Colonne | Contenu | |---------|---------| | **Ouverte** | Date et heure d'ouverture | | **Fermée** | Date et heure de fermeture, ou badge `Ouverte` (vert) si en cours | | **État** | ✓ (vert) si journée ouverte, ✗ (gris) sinon | | **Entrepôt** | Nom de l'entrepôt rattaché | | **Sous-compte** | Sous-compte ayant ouvert la journée | ### Filtres - **Calendrier** (composant `CalendrierPC`) : sélectionner une plage de dates pour filtrer. - Filtres colonne sur *Ouverte*, *Entrepôt*, *Sous-compte*. ### Tri Par date d'ouverture (par défaut), entrepôt, ou sous-compte. --- ## C. Fermer / clôturer une journée ### Finalité Arrêter les saisies d'opérations pour une journée. Permet de figer les états (caisse, stock, ventes du jour) et d'en générer le rapport. ### Prérequis - Être le sous-compte propriétaire de la journée ouverte (ou avoir la permission équivalente) - Toutes les opérations nécessaires saisies (factures, dépenses, pointage caisse, etc.) ### Pas-à-pas 1. Ouvrir le module **Journée**. 2. Le bouton précédemment vert devient rouge : **🔴 Fermer la journée**. 3. Cliquer dessus. 4. Confirmer si demandé. 5. La journée passe à l'état fermé : la colonne *Fermée* affiche la date/heure, l'État passe à ✗. ### Conséquences - Les modules métier deviennent **read-only pour cette journée** (impossible d'ajouter de nouvelles opérations). - Les états financiers consolidés (caisse en fin de journée, ventes, dépenses) sont calculables. - Il est possible d'**ouvrir une nouvelle journée** (jour suivant ou même date — selon la politique de l'entreprise). ### Bonnes pratiques avant la clôture 1. **Pointer la caisse** : vérifier que les soldes ESPECE / OM / MOMO correspondent au physique (voir `07-FINANCES.md`). 2. **Saisir toutes les dépenses** du jour (carburant, fournitures…). 3. **Confirmer les livraisons** des feuilles de route en cours (voir `05-VENTES.md`). 4. **Solder les régularisations** : retours, échanges, instances. 5. **Exporter les états** importants (PDF/Excel) pour archive. --- ## D. Naviguer entre journées passées ### Finalité Consulter l'historique des journées (clôturées) pour audit, rapports, vérifications. ### Accès Menu **Journée** + filtre calendrier. ### Pas-à-pas 1. Dans le module **Journée**, ouvrir le **calendrier**. 2. Sélectionner une **journée** spécifique ou une **plage** de dates. 3. Appliquer. 4. Le tableau affiche les journées correspondantes. 5. Cliquer sur une ligne pour ouvrir les détails (opérations rattachées si la fonction existe sur l'écran). ### Filtrage croisé Le composant `CalendrierPC` est aussi utilisé dans d'autres modules (Historique designation, Historique client, États finances) pour aligner les vues sur les mêmes journées. --- ## E. Cas particuliers ### Aucune journée ouverte → impossible de travailler Si un utilisateur tente une opération métier (créer une facture, saisir un transfert, etc.) sans journée ouverte, l'application **refuse** et invite à ouvrir la journée d'abord. Le bouton d'ouverture n'est cependant **disponible que pour les sous-comptes**. ### Journée ouverte par un autre sous-compte Si un autre sous-compte du **même entrepôt** a déjà ouvert une journée, l'ouverture est bloquée. Solution : attendre la clôture ou demander à l'autre utilisateur de fermer. ### Multi-entrepôt Plusieurs journées peuvent être ouvertes **simultanément** s'il y a plusieurs entrepôts — une par entrepôt. Chaque sous-compte travaille sur la journée de son propre entrepôt. ### Erreur / message d'erreur - `journee_success` : journée ouverte avec succès - `journee_closed` : journée fermée avec succès - `journee_error` : erreur (lire le détail retourné par l'API) --- ## Endpoints internes (référence technique) | Action | Endpoint | |--------|----------| | Liste des journées | `GET API_JOURNEE.list()` | | Ouvrir une journée | `POST API_JOURNEE.create` (corps : `{ ouvert: }`) | | Fermer la journée ouverte | `POST API_JOURNEE.close` | Le contexte global `JourneeContext` expose : `journeeOuverte`, `journeeEntrepotId`, `journeeLoading`, `refreshJournee()`. Sur événement WebSocket `journe.created` ou `journe.closed`, le contexte se rafraîchit automatiquement. --- ## Liens avec autres modules | Action métier | Conditionne | |---------------|-------------| | **Aucune saisie possible sans journée ouverte** | `04-STOCK.md`, `05-VENTES.md`, `06-ACHATS.md`, `07-FINANCES.md`, `08-OBJECTIFS-RISTOURNES.md` | | **Pointage de caisse** avant clôture | `07-FINANCES.md` § A | | **Confirmation livraisons** avant clôture | `05-VENTES.md` § B | | **Filtrage par journée** dans historiques et états | `04-STOCK.md` § F, `07-FINANCES.md` § G, `03-CLIENTS-FOURNISSEURS.md` § F-G | --- ## Rappel contact (fin de document) Pour toute demande commerciale, technique, démonstration ou partenariat sur Stores by Vytars : - Téléphone / WhatsApp : +237 695 092 273 - Email : tsafack40@gmail.com - Site produit : https://vytarsstores.com - Site entreprise : https://vytars.net - CV du fondateur Kevin Hulric Tsafack : https://vytars.net/cv