# ShopOnePlus Cloud — Manuel de Présentation Fonctionnelle & Parcours de Formation

Bienvenue dans le guide officiel de **ShopOnePlus Cloud**, une application de gestion commerciale (ERP/SaaS) moderne et performante, construite sur le framework Laravel, avec Livewire pour le dynamisme de l'interface utilisateur, et Tailwind CSS pour son esthétique moderne.

Ce document présente l'architecture fonctionnelle de l'application, détaille son fonctionnement interne et propose un parcours de formation complet jalonné d'exercices pratiques pour les apprenants.

---

## Sommaire
1. [Présentation Générale & Architecture](#1-présentation-générale--architecture)
2. [Fonctionnalités Clés et Fonctionnement Interne](#2-fonctionnalités-clés-et-fonctionnement-interne)
   - [A. Gestion des Utilisateurs et Accès](#a-gestion-des-utilisateurs-et-accès)
   - [B. Numérotation Automatique (Souches)](#b-numérotation-automatique-souches)
   - [C. Gestion des Tiers (Clients, Fournisseurs, Apporteurs)](#c-gestion-des-tiers-clients-fournisseurs-apporteurs)
   - [D. Dépôts et Mouvements de Stock](#d-dépôts-et-mouvements-de-stock)
   - [E. Pièces de Gestion et Cycles de Vente/Achat](#e-pièces-de-gestion-et-cycles-de-venteachat)
   - [F. Caisses et Sessions de Trésorerie](#f-caisses-et-sessions-de-trésorerie)
3. [Parcours de Formation Complet (Curriculum)](#3-parcours-de-formation-complet-curriculum)
4. [Exercices Pratiques et Mises en Situation](#4-exercices-pratiques-et-mises-en-situation)

---

## 1. Présentation Générale & Architecture

**ShopOnePlus Cloud** est conçu pour les entreprises multi-points de vente et multi-dépôts. L'application unifie la gestion des stocks, la facturation client et fournisseur, et la trésorerie au sein d'une interface cloud unique et fluide.

### Technologies Clés de l'Application :
*   **Backend** : Laravel 10/11, PHP 8.2+.
*   **Frontend Interactif** : Livewire 3 (permettant une réactivité Single Page Application sans quitter PHP).
*   **Génération PDF** : Spatie Browsershot (qui pilote une instance Chromium pour convertir les modèles Blade HTML de factures/devis en fichiers PDF de haute qualité).
*   **Notifications** : Système de notification intégré pour alerter en cas de stock bas ou de validation de pièces.

---

## 2. Fonctionnalités Clés et Fonctionnement Interne

### A. Gestion des Utilisateurs et Accès

L'accès à l'application est hautement sécurisé et compartimenté :
1.  **Profil et Rôles** : Chaque utilisateur (`User`) possède un niveau d'accès (`niveau_acces`) et est rattaché à des rôles/permissions via `Spatie\Permission`.
2.  **Rattachement Dépôt** : Un utilisateur a accès à un ou plusieurs dépôts (`Depot`). À la connexion, un dépôt est configuré comme **actif** pour l'utilisateur (`getFirstDepotActiveId()`). Toutes les opérations de vente et d'inventaire qu'il effectue par défaut impacteront ce dépôt.
3.  **Rattachement Caisse** : Les caissiers sont affectés à des caisses spécifiques (`caisse_user`). Ils ne peuvent pas manipuler une caisse sans habilitation.

---

### B. Numérotation Automatique (Souches)

Le système dispose d'un moteur de numérotation automatique dynamique géré par le modèle `Souche`.
*   **Format Personnalisable** : Les formats sont définis sous forme de tableaux JSON décodés dynamiquement (ex: `["CHAINE", "Date", "NUMERO"]`).
*   **Variables supportées** :
    *   `CHAINE` : Un préfixe fixe défini sur la souche (ex: `FAC-`, `CMD-`).
    *   `Date` : Date actuelle formatée au format `AAAAMMJJ`.
    *   `HEURE` : Heure actuelle formatée au format `HHMMSS`.
    *   `NUMERO` : Compteur séquentiel incrémenté automatiquement (ex: `0001`, `0002`) basé sur la longueur configurée (`longueur_num`).
*   **Exemple** : La fonction `Helper::generateModelCode` génère ainsi des codes uniques et standardisés pour chaque type de pièce de gestion.

---

### C. Gestion des Tiers (Clients, Fournisseurs, Apporteurs)

Le modèle `Tier` unifie toutes les entités externes :
*   **Types de Personnes** : Personne physique (Nom + Prénom) ou Personne morale (Dénomination, Sigle, RCCM, IFU).
*   **Types de Tiers** : Client, Fournisseur, Commercial, Apporteur d'Affaires.
*   **Carte de Fidélité** : Les clients peuvent posséder une carte de fidélité active. Le système calcule et cumule les points de fidélité en fonction de grilles tarifaires configurables lors de chaque vente (`increaseTierCarteFidelite`).
*   **Comptabilité et Soldes** : Suivi rigoureux du solde courant (`solde`), des acomptes versés (`solde_acompte`), et des factures impayées (`solde_impaye`).

---

### D. Dépôts et Mouvements de Stock

L'inventaire est géré de manière granulaire via le modèle `DepotStock` :
*   **Valorisation des Stocks** :
    *   **CMUP** : Coût Moyen Unitaire Pondéré, recalculé dynamiquement lors de chaque entrée en stock.
    *   **FIFO** / **LIFO** : Prix du premier entré ou dernier entré historisé pour analyse financière.
*   **Gestion des Unités (Mesures)** : Chaque article possède une unité par défaut (ex: "UNITÉ", "CARTON"). La fonction `Helper::convertMesureQuantite` convertit automatiquement les unités secondaires en quantité de base selon des coefficients multiplicateurs définis dans `ArticleTierMesure`.
*   **Réapprovisionnement Automatique** : Si un article est configuré avec `appro_automatique = true` et que son stock descend en dessous du seuil critique (`quantite_approv`), le système crée automatiquement une pièce de type "Commande fournisseur" auprès du fournisseur désigné (`fournisseur_appro_id`).

---

### E. Pièces de Gestion et Cycles de Vente/Achat

Les pièces de gestion (`PieceGestion`) régissent les flux opérationnels de l'entreprise :
*   **Cycle Achat** : `Demande de prix fournisseur` $\rightarrow$ `Commande fournisseur` $\rightarrow$ `Réception fournisseur` (Entrée en stock) $\rightarrow$ `Facture fournisseur`.
*   **Cycle Vente** : `Devis client` $\rightarrow$ `Facture proforma` $\rightarrow$ `Bon de commande` $\rightarrow$ `Vente directe aux clients` (Point de Vente) ou `Facture client` (Sortie de stock).
*   **Mouvement de Stock Automatique** : Selon la `NaturePiece`, la pièce peut posséder les options :
    *   `mouvementer_stock = true`
    *   `sens = 'plus'` (ex: Réception fournisseur, Pièce d'entrée) $\rightarrow$ augmente le stock.
    *   `sens = 'moins'` (ex: Facture client, Pièce de sortie) $\rightarrow$ diminue le stock.
*   **Statuts** : Les pièces passent par différents statuts : `Nouveau`, `Soumis`, `Validé`, `Annulé`, `Rejeté`.

---

### F. Caisses et Sessions de Trésorerie

Le module financier gère les flux d'espèces et autres modes de paiement :
*   **Session de Trésorerie (`SessionTresorerie`)** : Un caissier doit ouvrir une session de trésorerie sur sa caisse assignée pour pouvoir encaisser. La session conserve le solde initial, les entrées, les sorties et calcule le solde théorique.
*   **Opérations de Caisse** :
    *   **Encaissement** : Augmentation du solde réel de la caisse et du montant de la session pour le mode de règlement utilisé (ex: espèces).
    *   **Décaissement** : Diminution du solde lors de dépenses opérationnelles ou d'acomptes clients/fournisseurs.
*   **Transfert de Fonds** : Permet de déplacer des fonds de manière sécurisée d'une caisse vers une autre (par exemple, d'une caisse auxiliaire vers la caisse principale).
*   **Multi-Devises** : Le format des montants (`Helper::viewformateMontant`) s'adapte à la devise de la caisse en configurant les séparateurs de milliers, de décimales, le nombre de décimales et le positionnement du symbole monétaire (Avant ou Après).

---

## 3. Parcours de Formation Complet (Curriculum)

Ce parcours de formation est conçu pour amener un apprenant (administrateur système ou opérateur) de zéro à une maîtrise complète de ShopOnePlus Cloud.

```mermaid
graph TD
    M1[Modul 1: Paramétrage Initial] --> M2[Modul 2: Référentiel Données]
    M2 --> M3[Modul 3: Cycle Achat & Stock]
    M3 --> M4[Modul 4: Cycle Vente & Caisse]
    M4 --> M5[Modul 5: Administration & Clôture]
```

### Module 1 : Paramétrage de Base & Structure d'Entreprise (Durée : 4h)
*   **Objectif** : Configurer la structure légale de la société, les devises de travail, les utilisateurs et les règles de numérotation.
*   **Concepts clés** :
    *   Fiche Société et Formes Juridiques.
    *   Devise Monétaire et formats d'affichage (Précision, Séparateurs).
    *   Création des Dépôts et des Caisses.
    *   Création des Rôles, Utilisateurs et affectation des Dépôts/Caisses.
    *   Configuration des Souches pour la numérotation des pièces.

### Module 2 : Gestion du Référentiel Articles & Tiers (Durée : 6h)
*   **Objectif** : Renseigner les bases de données d'articles et de tiers pour démarrer les opérations.
*   **Concepts clés** :
    *   Fiche Article : Familles, Catégories, Types de Tarifs (Normal, Revendeur, Grossiste).
    *   Unités de mesure (Unités de base et conversion).
    *   Fiche Tiers : Distinction des types (Client, Fournisseur, Commercial, Apporteur).
    *   Cartes de fidélité et grilles de points.
    *   Régimes fiscaux et paramétrage des taxes (TVA, IS).

### Module 3 : Gestion du Cycle d'Achat & Approvisionnement (Durée : 6h)
*   **Objectif** : Gérer les commandes fournisseurs, réceptionner les stocks et comprendre la valorisation.
*   **Concepts clés** :
    *   Demandes de prix et Bons de commande Fournisseurs.
    *   Bons de réception et Entrées en stock physiques.
    *   Calcul dynamique du CMUP (Coût Moyen Unitaire Pondéré).
    *   Gestion du réapprovisionnement automatique sur seuil bas.

### Module 4 : Flux de Vente, Point de Vente (POS) & Trésorerie (Durée : 8h)
*   **Objectif** : Maîtriser les opérations quotidiennes de vente, l'utilisation de la caisse et la gestion des paiements.
*   **Concepts clés** :
    *   Cycle standard : Dévis $\rightarrow$ Facture proforma $\rightarrow$ Bon de commande $\rightarrow$ Facture client.
    *   Ouverture d'une Session de caisse (Trésorerie).
    *   Utilisation de l'interface POS pour les ventes directes.
    *   Modes de règlement (Espèces, Chèques, Cartes, Mobile Money).
    *   Rendu de monnaie et gestion des écarts de caisse.
    *   Règlement de factures à crédit et encaissements différés.

### Module 5 : Analyse, Inventaires & Opérations de Fin de Période (Durée : 6h)
*   **Objectif** : Réaliser des ajustements de stock, transférer des fonds et clôturer les périodes comptables.
*   **Concepts clés** :
    *   Mouvements de stock internes : Pièces d'entrée, Pièces de sortie (pertes, casses).
    *   Transferts de stocks inter-dépôts.
    *   Clôture d'une Session de Trésorerie et versement à la caisse principale.
    *   Génération des états PDF (Journaux de caisse, Fiches de stock).

---

## 4. Exercices Pratiques et Mises en Situation

Voici des exercices concrets conçus pour valider les acquis à chaque étape de la formation.

### Exercice 1 : Configuration d'une Règle de Numérotation (Souche)
> [!NOTE]
> **Objectif** : Comprendre le paramétrage des souches de numérotation automatique.
*   **Enoncé** : 
    1.  Créez une nouvelle Souche nommée "Factures Clients 2026".
    2.  Configurez le format JSON pour qu'il affiche la chaîne fixe `FC26-`, suivie de la Date du jour (`Date`), suivie d'un numéro incrémental sur 5 chiffres.
    3.  Liez cette souche à la nature de pièce "Facture client".
*   **Critères de réussite** : 
    *   Lors de la création d'une nouvelle facture client, le code généré automatiquement doit ressembler à `FC26-20260619-00001`.

---

### Exercice 2 : Fiche Article Multi-Unités & Approvisionnement Auto
> [!NOTE]
> **Objectif** : Valider la conversion d'unités de mesure et le fonctionnement du réapprovisionnement automatique.
*   **Enoncé** :
    1.  Créez un article "Sac de Ciment 50kg" :
        *   Unité de base : `SAC` (prix d'achat de base : 5 000 FCFA).
        *   Unité secondaire : `TONNE` (avec un coefficient de conversion de `20` sacs).
    2.  Activez l'approvisionnement automatique sur cet article :
        *   Seuil de réapprovisionnement : `10 SAC`.
        *   Quantité à commander : `50 SAC`.
        *   Fournisseur associé : "Fournisseur CIMENT-CO".
    3.  Simulez une sortie de stock faisant passer la quantité en stock à `5 SAC`.
*   **Critères de réussite** :
    *   Vérifier que la fonction `Helper::convertMesureQuantite` calcule bien 20 sacs lorsqu'on saisit 1 tonne.
    *   Vérifier qu'une commande fournisseur de 50 sacs a été automatiquement générée pour "Fournisseur CIMENT-CO".

---

### Exercice 3 : Flux d'Achat Complet et Valorisation CMUP
> [!NOTE]
> **Objectif** : Maîtriser le cycle d'achat et comprendre le recalcul du CMUP.
*   **Enoncé** :
    1.  Faites entrer en stock `100` unités d'un article "Lampe LED" à un prix d'achat unitaire de `1 000 FCFA` (stock initial = 0).
    2.  Vérifiez que le CMUP de l'article dans le dépôt actif est de `1 000 FCFA`.
    3.  Créez une nouvelle réception fournisseur de `50` unités de "Lampe LED" mais à un nouveau prix d'achat de `1 300 FCFA`.
*   **Critères de réussite** :
    *   Le stock total doit être de `150` unités.
    *   Le CMUP doit être recalculé à `1 100 FCFA` selon la formule :
        $$\text{CMUP} = \frac{(100 \times 1000) + (50 \times 1300)}{150} = \frac{100000 + 65000}{150} = 1100$$

---

### Exercice 4 : Session de Caisse et Rendu de Monnaie au POS
> [!NOTE]
> **Objectif** : Pratiquer l'ouverture de caisse, l'encaissement et la validation des flux.
*   **Enoncé** :
    1.  Ouvrez une nouvelle session de trésorerie sur la caisse "Caisse Boutique" avec un solde initial de `10 000 FCFA`.
    2.  Effectuez une vente directe POS d'un montant total de `3 500 FCFA`.
    3.  Sélectionnez le mode de règlement `Espèces`.
    4.  Saisissez un montant reçu de la part du client de `5 000 FCFA`.
*   **Critères de réussite** :
    *   Le système doit afficher un montant à rendre de `1 500 FCFA`.
    *   Vérifiez dans la base de données ou l'interface de suivi que le solde réel de la caisse a bien été incrémenté net de `+3 500 FCFA` (Solde final = `13 500 FCFA`).
    *   Le flux de la session doit afficher `1` transaction d'entrée.

---

### Exercice 5 : Transfert de Stock Inter-Dépôts
> [!NOTE]
> **Objectif** : Réaliser des mouvements de stock sans vente ni achat.
*   **Enoncé** :
    1.  Identifiez deux dépôts actifs : "Dépôt Principal" et "Boutique Centre".
    2.  Créez une pièce de transfert de stock pour envoyer `20` "Lampes LED" du "Dépôt Principal" vers "Boutique Centre".
    3.  Validez la pièce de transfert.
*   **Critères de réussite** :
    *   La fiche de stock du "Dépôt Principal" doit enregistrer une diminution de `20` unités.
    *   La fiche de stock de la "Boutique Centre" doit enregistrer une augmentation de `20` unités.
    *   Aucun flux comptable ou mouvement de caisse ne doit être généré (opération purement logistique).
