3.5 KiB
3.5 KiB
Business Rules - Purchase Trade
Statut: draft
Version: v0.1
Derniere mise a jour: 2026-03-25
Owner metier: a completer
Owner technique: a completer
1) Scope
- Domaine:
purchase_trade - Hors scope:
- Modules impactes:
purchase_tradelot
2) Glossaire
Purchase Line: ligne d'achat.quantity_theorical: quantite theorique contractuelle de la ligne.Virtual Lot: lot unique de typevirtualrattache a unepurchase.line.lot.qt: table des quantites ouvertes, matchées ou shippées par lot.lot.qt ouvert: enregistrementlot.qtaveclot_p = virtual lot,lot_s = Noneet sans shipment.
3) Regles metier
BR-PT-001 - Ajustement de la quantite theorique apres creation du contrat
- Intent: conserver la coherence entre la quantite theorique de la ligne d'achat, le lot virtuel associe et les quantites ouvertes stockees dans
lot.qt. - Description:
- Quand
purchase.line.quantity_theoricalest modifiee apres creation du contrat, le systeme doit recalculer le delta entre l'ancienne et la nouvelle valeur. - La regle s'applique au lot unique de type
virtualrattache a lapurchase.line.
- Quand
- Conditions d'entree:
- Une
purchase.lineexiste deja. - Son champ
quantity_theoricalest modifie viawrite. - Un lot
virtualest rattache a la ligne.
- Une
- Resultat attendu:
- Si
delta > 0:- augmenter la quantite courante du lot
virtualviaset_current_quantitypour conserver l'historiquelot.qt.hist - augmenter le
lot.qtouvert existant - si aucun
lot.qtouvert n'existe, en creer un nouveau avec le delta
- augmenter la quantite courante du lot
- Si
delta < 0:- diminuer le
lot.qtouvert uniquement si la quantite ouverte disponible est suffisante - diminuer la quantite courante du lot
virtualdu meme delta - si aucun
lot.qtouvert n'existe ou si sa quantite est insuffisante, bloquer avec l'erreurPlease unlink or unmatch lot
- diminuer le
- Si
- Definition du
lot.qtouvert:lot_p = virtual lotlot_s = Nonelot_shipment_in = Nonelot_shipment_internal = Nonelot_shipment_out = None
- Exceptions:
- si aucun lot
virtualn'est trouve sur la ligne, la regle ne fait rien
- si aucun lot
- Priorite:
bloquante
- Source:
Decision metier documentee dans les commentaires de purchase_trade.purchase.Line.write
4) Exemples concrets
Exemple E1 - Augmentation simple
- Donnees:
ancienne quantity_theorical = 100nouvelle quantity_theorical = 120lot.qt ouvert = 40
- Attendu:
- lot
virtualaugmente de20 lot.qt ouvertpasse de40a60
- lot
Exemple E2 - Augmentation sans lot.qt ouvert
- Donnees:
ancienne quantity_theorical = 100nouvelle quantity_theorical = 110- aucun
lot.qtouvert
- Attendu:
- lot
virtualaugmente de10 - creation d'un
lot.qtouvert a10
- lot
Exemple E3 - Diminution possible
- Donnees:
ancienne quantity_theorical = 100nouvelle quantity_theorical = 90lot.qt ouvert = 25
- Attendu:
- lot
virtualdiminue de10 lot.qt ouvertpasse de25a15
- lot
Exemple E4 - Diminution impossible
- Donnees:
ancienne quantity_theorical = 100nouvelle quantity_theorical = 80lot.qt ouvert = 5
- Attendu:
- blocage avec
Please unlink or unmatch lot
- blocage avec
5) Impact code attendu
- Fichiers Python concernes:
modules/purchase_trade/purchase.pymodules/purchase_trade/lot.py
6) Strategie de tests
Pour cette regle, couvrir au minimum:
- augmentation avec
lot.qtouvert existant - augmentation sans
lot.qtouvert - diminution possible
- diminution impossible avec erreur