docs/25-stock/99-technique.md —
ce document se lit aussi dans le dépôt, sans serveur.
Stock — le côté technique
Les fichiers
| Rôle | Fichier |
|---|---|
| Écran | public/erp/stocks.php + public/erp/assets/js/pages/stocks-2.js |
| API stock | src/Http/Controllers/StockController.php |
| API valorisation | src/Http/Controllers/StockValuationController.php |
| Données | src/Repository/StockRepository.php |
| L'état d'une référence | src/Stock/EtatDeStock.php |
| Le verdict d'une commande | src/Stock/EtatDeCommande.php |
| Le CUMP | src/Finance/ValorisationStock.php |
| Le coût dans la marge | Finance\Marge::coutDuStockUtilise() |
| Le catalogue | src/Woo/WooProductRepository.php |
Les tables
| Table | Contenu |
|---|---|
stock_items | Une fiche par référence : nature, seuil, notes. Clé (woo_product_id, woo_variation_id), un produit simple portant 0. |
stock_movements | Le grand livre. quantite signée, warehouse_id, motif, bill_id, prix_unitaire_ht, woo_order_id. |
stock_item_suppliers | Les fournisseurs d'un produit : leur SKU, prix négocié, dernier prix payé, principal. |
warehouses | Les entrepôts : code court, nom, actif, position. |
Migrations 036 → 039.
La 036 a été réécrite après avoir tourné — une faute — et la 037 rattrape. Une migration appliquée quelque part est de l'histoire : on la corrige avec la suivante, on ne la réécrit jamais. Voir l'en-tête de migrations/036_stocks.sql.
Les pièges connus
si.nature et l'alias categorie
Quand bills.categorie est arrivée, un GROUP BY categorie dans Marge a cessé de grouper par catégorie de fournisseur — MySQL donne raison à la colonne, pas à l'alias. Les frais de période étaient faux sans que rien ne le dise.
Deux sources pour les onglets
« Produits » et « Non stocké » listent le catalogue de la boutique ; les autres listent ce que Darsy sait, sans passer par la boutique.
Paginer sur le catalogue pour n'en garder que 3 % rendait des pages presque vides.
SQLite ne vérifie ni les clés étrangères ni les ENUM
Le banc de test répond des requêtes, pas du schéma. La suite MySQL est la seule à en répondre.
Les tests
tests/Unit/EtatDeStockTest.php (les cinq états), tests/Unit/MouvementsDeStockTest.php (les invariants, les transferts), tests/Unit/ValorisationStockTest.php (le CUMP, cas par cas), tests/Unit/EtatDeCommandeTest.php, tests/Unit/CatalogueProduitsTest.php, tests/Unit/FraisDePeriodeTest.php (le stock dans la marge).