# AGENTS.md - Module `purchase` Ce guide complete le `AGENTS.md` racine. Pour ce module, les regles locales ci-dessous priment. ## 1) Perimetre metier Le module `purchase` gere le cycle d'achat fournisseur: - commande d'achat (`purchase.purchase`, `purchase.line`) - facturation fournisseur (`account.invoice` liee a l'achat) - reception/retour de stock (`stock.move`, `stock.shipment.in`, `stock.shipment.in.return`) - reporting achats (axes temporels, fournisseur, produit) ## 2) Fichiers pivots - Logique coeur: - `modules/purchase/purchase.py` - Extensions metier connexes: - `modules/purchase/product.py` - `modules/purchase/stock.py` - `modules/purchase/invoice.py` - `modules/purchase/party.py` - `modules/purchase/configuration.py` - `modules/purchase/purchase_reporting.py` - Vues et actions: - `modules/purchase/purchase.xml` - `modules/purchase/stock.xml` - `modules/purchase/invoice.xml` - `modules/purchase/purchase_reporting.xml` - Manifest et dependances: - `modules/purchase/tryton.cfg` - Documentation metier: - `modules/purchase/docs/business-rules.template.md` (template) - `modules/purchase/docs/business-rules.md` (instance a remplir) ## 3) Etats et flux critiques a preserver Workflow de commande (dans `purchase.py`): - `draft -> quotation -> confirmed -> processing -> done` - transitions de retour existent aussi (`cancelled`, retour a `draft`, etc.) Invariants importants: - `invoice_state` et `shipment_state` doivent rester coherents apres `process()`. - `process()` orchestre facture + stock + recalcul d'etats, ne pas contourner sans raison. - `delete()` exige une commande annulee. - Les methodes `create_invoice()` et `create_move()` sont sensibles (gestion `lots` et `action`). ## 4) Couplages a surveiller - Facture: - `purchase.py` <-> `invoice.py` - gestion des exceptions facture (`purchase_exception_state`) - Stock: - `purchase.py` <-> `stock.py` - liens `moves`, expeditions entrantes, retours - Produit/fournisseur/prix: - `product.py` impacte prix d'achat, UoM, fournisseurs - Tiers: - `party.py` impacte adresses/parametres fournisseur et contraintes d'effacement ## 5) Convention de modification pour ce module 1. Modifier d'abord le coeur minimal dans `purchase.py` ou le fichier specialise adequat. 2. Mettre a jour XML uniquement si comportement UI/action change. 3. Si regle metier impactee, mettre a jour `docs/business-rules.md`. 4. Ajouter un test proche du flux reel (scenario `.rst` prioritaire si possible). 5. Verifier les impacts transverses facture/stock avant rendu. ## 6) Strategie de test recommandee Priorite 1 (rapide): - `modules/purchase/tests/test_module.py` Priorite 2 (comportement metier): - `modules/purchase/tests/test_scenario.py` - Scenarios cibles selon la modif: - `scenario_purchase.rst` - `scenario_purchase_manual_invoice.rst` - `scenario_purchase_line_cancelled.rst` - `scenario_purchase_line_cancelled_on_shipment.rst` - `scenario_purchase_return_wizard.rst` - `scenario_purchase_reporting.rst` Si la modif touche prix/UoM/fournisseur: - ajouter un cas dans `test_module.py` ou un scenario dedie. ## 7) Cas qui exigent validation humaine - Changement du workflow d'etats - Changement des regles de creation facture/mouvement - Changement de logique sur retours fournisseur - Changement qui altere les ecritures comptables ou le statut de paiement ## 8) Definition of done (module `purchase`) - Le flux metier cible fonctionne de bout en bout. - Les etats `state`, `invoice_state`, `shipment_state` restent coherents. - Les tests du module pertinents passent. - Le patch est limite aux fichiers necessaires.