diff --git a/modules/purchase_trade/docs/business-rules.md b/modules/purchase_trade/docs/business-rules.md index 99b95df..033aaf4 100644 --- a/modules/purchase_trade/docs/business-rules.md +++ b/modules/purchase_trade/docs/business-rules.md @@ -663,6 +663,34 @@ Owner technique: `a completer` - Priorite: - `structurante` +### BR-PT-022 - Remove physical lot restaure le lot.qt ouvert avec son contexte + +- Intent: permettre d'annuler un lot physique cree par erreur sans perdre le + contexte metier de shipment ou de matching deja porte par ce lot. +- Description: + - L'action `Remove physical lot` peut supprimer un lot physique meme s'il est + shippe, matche, ou les deux. + - Dans ces cas, l'utilisateur doit recevoir un warning confirmable avant la + suppression. + - La suppression n'est autorisee que si le `stock.move` lie au lot physique + est encore en etat `draft`. + - Si le `stock.move` n'est pas en `draft`, l'action est bloquee car le flux + peut deja avoir des impacts stock/comptables. +- Resultat attendu: + - le `lot.move` et le `stock.move` correspondant sont supprimes avec le lot + physique. + - la quantite courante convertie du lot physique est restauree dans `lot.qt`. + - si le lot etait shippe, la ligne `lot.qt` restauree conserve le shipment + (`lot_shipment_in`, `lot_shipment_internal` ou `lot_shipment_out`). + - si le lot etait matche, la ligne `lot.qt` restauree conserve le lot sale + virtuel (`lot_s`). + - si une ligne `lot.qt` existe deja avec le meme lot purchase virtuel, le + meme shipment et le meme `lot_s`, la quantite est agregee sur cette ligne + plutot que de creer un doublon. + - si aucune ligne compatible n'existe, une nouvelle ligne `lot.qt` est creee. +- Priorite: + - `importante` + ## 4) Exemples concrets ### Exemple E1 - Augmentation simple diff --git a/notes/business_rules.md b/notes/business_rules.md index f15a6bc..93bad5e 100644 --- a/notes/business_rules.md +++ b/notes/business_rules.md @@ -194,3 +194,23 @@ elle existe, par exemple: - A la suppression du dernier physique, le fee retombe sur son lot virtuel. - Le PnL fee suit la meme logique: full open tant que seul le virtuel existe, puis uniquement les lots physiques effectifs. + +## Session 2026-05-06 - Remove physical lot + +### `lot.remove` / lot physique shippe ou matche + +- L'action `Remove physical lot` ne bloque plus automatiquement un lot physique + shippe ou matche. +- Si le lot est shippe, matche, ou les deux, l'utilisateur doit confirmer un + warning avant suppression. +- La suppression reste interdite si le `stock.move` lie au lot physique n'est + pas en etat `draft`, car le mouvement peut deja etre engage ou comptabilise. +- Quand la suppression est confirmee, le `lot.move`, le `stock.move` draft et + le lot physique sont supprimes. +- La quantite du lot physique est restauree dans `lot.qt` avec le meme contexte + metier: + - meme lot purchase virtuel (`lot_p`); + - meme shipment si le lot etait shippe; + - meme lot sale virtuel (`lot_s`) si le lot etait matche. +- Si une ligne `lot.qt` existe deja avec ce meme contexte, la quantite est + agregee sur la ligne existante au lieu de creer un doublon.