# Phase 6 — Achats fournisseurs

## Installation

Importer après les migrations précédentes :

`database/migrations/202608050004_phase6_purchases.sql`

La migration ajoute 12 tables, cinq séquences documentaires et les permissions du cycle achats.

## Cycle livré

`Demande → Commande fournisseur → Réception(s) → Facture fournisseur → Paiement(s)`

- demandes internes avec priorité, entrepôt, lignes et transitions ;
- commandes manuelles ou liées à une demande, totaux HT/remise/TVA/TTC ;
- réceptions complètes ou partielles, reliquats et mouvements de stock atomiques ;
- factures issues d’une commande, avec échéance et solde calculé ;
- paiements espèces, virement, chèque ou carte, partiels ou complets ;
- retours fournisseurs avec sorties de stock transactionnelles ;
- historique métier et journal global ;
- dashboard, recherches, impressions et exports CSV/Excel/PDF.

## Tables

`purchase_sequences`, `purchase_requests`, `purchase_request_lines`, `purchase_orders`, `purchase_order_lines`, `purchase_receipts`, `purchase_receipt_lines`, `supplier_invoices`, `supplier_invoice_lines`, `supplier_payments`, `supplier_returns`, `supplier_return_lines`, `purchase_history`.

## Permissions

`purchases.view`, `create`, `update`, `validate`, `receive`, `invoice`, `payment`, `return`, `export`.

## Recette recommandée

1. Créer et valider une demande.
2. Créer une commande fournisseur avec deux lignes et contrôler les totaux.
3. Valider la commande, recevoir partiellement puis contrôler mouvements et reliquats.
4. Effectuer une seconde réception et vérifier le statut reçu.
5. Créer la facture, saisir un paiement partiel puis le solde.
6. Contrôler les statuts `partially_paid` puis `paid`.
7. Retourner une quantité et vérifier la sortie de stock.
8. Tester quantité reçue supérieure au reliquat, paiement supérieur au solde et stock insuffisant au retour.
9. Tester les permissions, accès directs, CSRF et exports.

## Vérifications de livraison

- import réel des migrations phases 2 à 6 sur MariaDB 10.4 temporaire ;
- contraintes, relations et séquences créées sans erreur ;
- lint PHP 8.2 réussi ;
- toutes les routes POST protégées par CSRF ;
- réceptions et retours utilisent le moteur transactionnel de stock existant.

## Limites

- Les factures manuelles ou directement issues d’une réception sont prévues par le schéma ; l’interface actuelle privilégie le flux depuis commande.
- Les paiements sont rattachés à une facture. Le regroupement d’un paiement sur plusieurs factures sera une extension de trésorerie.
- Banque et caisse sont des références textuelles jusqu’au futur module financier.
- Les graphiques du dashboard sont représentés par des indicateurs ; une bibliothèque graphique pourra enrichir la présentation.
- Les ventes et paiements clients ne sont pas développés.
