# Business Rules Template - Purchase

Statut: `draft` | `reviewed` | `approved`  
Version: `v0.1`  
Derniere mise a jour: `YYYY-MM-DD`  
Owner metier: `Nom / Equipe`  
Owner technique: `Nom / Equipe`

## 1) Scope

- Domaine: `ex: achats fournisseur`
- Hors scope: `ex: achats intercompany`
- Modules impactes:
  - `purchase`
  - `stock` (si applicable)
  - `account_invoice` (si applicable)

## 2) Glossaire

- `Purchase`: commande d'achat fournisseur.
- `Line`: ligne de commande.
- `Invoice State`: etat facture calcule.
- `Shipment State`: etat reception calcule.
- Ajouter ici les termes metier propres a ton contexte.

## 3) Regles metier (source de verite)

### BR-001 - [Titre court]

- Intent: `Pourquoi cette regle existe`
- Description:
  - `Enonce clair et testable`
- Conditions d'entree:
  - `Etat`
  - `Type de ligne (goods/service)`
  - `Contexte (societe, devise, fournisseur, lot, etc.)`
- Resultat attendu:
  - `Etat/valeur/action attendue`
- Exceptions:
  - `Cas ou la regle ne s'applique pas`
- Priorite:
  - `bloquante | importante | informative`
- Source:
  - `Ticket / spec / decision metier`

### BR-002 - [Titre court]

- Intent:
- Description:
- Conditions d'entree:
- Resultat attendu:
- Exceptions:
- Priorite:
- Source:

## 4) Matrice d'etats (optionnel mais recommande)

| Regle | Etat initial | Evenement | Etat attendu | Notes |
|---|---|---|---|---|
| BR-001 | `draft` | `quote` | `quotation` | |
| BR-002 | `quotation` | `confirm` | `confirmed/processing` | |

## 5) Exemples concrets

### Exemple E1 - Cas nominal

- Donnees:
  - `fournisseur = X`
  - `produit = Y`
  - `quantite = 10`
- Attendu:
  - `invoice_state = pending`
  - `shipment_state = waiting`

### Exemple E2 - Cas limite

- Donnees:
- Attendu:

## 6) Impact code attendu

- Fichiers Python potentiellement concernes:
  - `modules/purchase/purchase.py`
  - `modules/purchase/stock.py`
  - `modules/purchase/invoice.py`
  - `modules/purchase/product.py`
- Fichiers XML potentiellement concernes:
  - `modules/purchase/purchase.xml`
  - `modules/purchase/stock.xml`
  - `modules/purchase/invoice.xml`

## 7) Strategie de tests

- Unitaires:
  - `modules/purchase/tests/test_module.py`
- Scenarios:
  - `modules/purchase/tests/scenario_purchase.rst`
  - `modules/purchase/tests/scenario_purchase_manual_invoice.rst`
  - `modules/purchase/tests/scenario_purchase_return_wizard.rst`

Pour chaque regle BR-xxx, lister le test associe:

| Regle | Test existant | Nouveau test a ajouter | Statut |
|---|---|---|---|
| BR-001 | `...` | `...` | `todo` |

## 8) Compatibilite et migration

- Effet retroactif sur commandes existantes: `oui/non`
- Migration necessaire: `oui/non`
- Plan de rollback:
  - `comment revenir en arriere sans corruption metier`

## 9) Validation

- Valide par metier:
  - `Nom` - `date`
- Valide par technique:
  - `Nom` - `date`
- Decision finale:
  - `approved / rejected / needs update`

