diff --git a/modules/purchase_trade/docs/business/INDEX.md b/modules/purchase_trade/docs/business/INDEX.md new file mode 100644 index 0000000..04243e3 --- /dev/null +++ b/modules/purchase_trade/docs/business/INDEX.md @@ -0,0 +1,46 @@ +# Index thematique des regles business + +Statut: `migration partielle` + +## Comment chercher une regle + +- Contrats, dates, lieux, banques: [contracts.md](contracts.md) +- Lots virtuels, lots physiques, `lot.qt`, weighing: [lots-and-quantities.md](lots-and-quantities.md) +- Matching, Create Contracts, back-to-back: [matching.md](matching.md) +- Shipments, controllers, SLA, weight reports: [shipments-execution.md](shipments-execution.md) +- Pricing manuel, basis, premium, linked currency: [pricing.md](pricing.md) +- Fees, freight, lots effectifs, `% rate`: [fees.md](fees.md) +- Valuation, PnL, MTM, derivatives: [valuation-pnl-mtm.md](valuation-pnl-mtm.md) +- Factures provisoires/finales, padding: [invoicing.md](invoicing.md) +- Impacts `account.move`, validate/post: [accounting-bridge.md](accounting-bridge.md) +- Comptes bancaires, payment terms, payment orders: [payments-banking.md](payments-banking.md) +- Relatorio, `.fodt`, proprietes `report_*`: [reports-templates.md](reports-templates.md) +- Risque, credit, forex: [risk-credit-forex.md](risk-credit-forex.md) +- Rapport Lots Management: [lots-management.md](lots-management.md) + +## Regles migrees dans cette premiere passe + +- `BR-PT-CON-001`: texte par defaut de pricing rule. +- `BR-PT-CON-002`: delivery period coherent. +- `BR-PT-CON-003`: lieux stock propages dans Create Contracts. +- `BR-PT-LOT-001`: lot physique comme pont metier. +- `BR-PT-LOT-002`: solde ouvert `lot.qt`. +- `BR-PT-LOT-003`: remove physical lot. +- `BR-PT-MAT-001`: Create Contracts multi-lots. +- `BR-PT-SHP-001`: affectation controller. +- `BR-PT-SHP-002`: couts SLA controller. +- `BR-PT-SHP-003`: weight reports distants. +- `BR-PT-PRI-001`: premium dans priced et basis. +- `BR-PT-PRI-002`: linked currency. +- `BR-PT-PRI-003`: pricing manuel. +- `BR-PT-FEE-001`: maritime freight depuis fee shipment. +- `BR-PT-FEE-002`: lots effectifs des fees. +- `BR-PT-FEE-003`: `% rate` via delta de financement. +- `BR-PT-VAL-001`: valuation achat/vente et sale-first. +- `BR-PT-VAL-002`: references de valuation. +- `BR-PT-VAL-003`: MTM hors fees. +- `BR-PT-INV-001`: padding facture provisoire vente. +- `BR-PT-ACC-001`: Validate facture client attribue le numero. +- `BR-PT-PAY-001`: comptes bancaires tiers vs compagnie. +- `BR-PT-RPT-001`: templates trade via proprietes Python. +- `BR-PT-LOTMGT-001`: filtres Lots Management. diff --git a/modules/purchase_trade/docs/business/README.md b/modules/purchase_trade/docs/business/README.md new file mode 100644 index 0000000..ea8fe98 --- /dev/null +++ b/modules/purchase_trade/docs/business/README.md @@ -0,0 +1,51 @@ +# Guide de lecture des regles business + +Statut: `migration partielle` +Derniere mise a jour: `2026-05-13` + +Ce dossier devient la source de lecture thematique pour les regles business du +module `purchase_trade`. + +Chaque page doit rester lisible par deux publics: + +- les consultants, qui ont besoin d'une regle fonctionnelle stable sans detail + de code inutile; +- les developpeurs, qui ont besoin des champs, modeles, fichiers et tests + concernes pour appliquer la regle sans l'interpreter. + +## Convention de redaction + +Pour chaque regle durable, utiliser autant que possible ce format: + +```md +### BR-PT-THEME-001 - Titre court + +Statut: active +Source: business-rules.md / note de session / decision projet + +#### Regle consultant + +Texte fonctionnel, sans nom de champ si ce n'est pas necessaire. + +#### Notes developpeur + +- Modeles/champs: +- Fichiers: +- Tests: +- Points de vigilance: +``` + +## Sources pendant la migration + +Les anciennes pages ne sont pas supprimees a cette etape. Elles restent des +sources de verification jusqu'a ce que chaque decision soit promue dans une +page thematique: + +- `modules/purchase_trade/docs/business-rules.md` +- `modules/purchase_trade/docs/fees.md` +- `modules/purchase_trade/docs/padding-invoice-accounting.md` +- `modules/purchase_trade/docs/template-rules.md` +- `modules/purchase_trade/docs/template-properties.md` +- `notes/business_rules.md` +- `notes/template_business_rules.md` + diff --git a/modules/purchase_trade/docs/business/accounting-bridge.md b/modules/purchase_trade/docs/business/accounting-bridge.md new file mode 100644 index 0000000..9ed8d82 --- /dev/null +++ b/modules/purchase_trade/docs/business/accounting-bridge.md @@ -0,0 +1,25 @@ +# Pont comptable + +Statut: `migration partielle` + +## BR-PT-ACC-001 - Validate facture client attribue aussi le numero + +Source: `BR-PT-017` + +### Regle consultant + +Une facture client doit recevoir son mouvement comptable et son numero des la +validation, comme une facture fournisseur. + +### Notes developpeur + +- Cible: `account.invoice` avec `type = out`. +- Workflow `Validate`: creer `account.move` et attribuer `number`. +- Workflow `Post`: ne doit pas reintroduire une session fraiche specifique au + flux client. + +## Notes de migration + +Les notes comptables detaillees restent dans `notes/accounting/` tant qu'elles +n'ont pas ete promues ici. + diff --git a/modules/purchase_trade/docs/business/contracts.md b/modules/purchase_trade/docs/business/contracts.md new file mode 100644 index 0000000..ad12d06 --- /dev/null +++ b/modules/purchase_trade/docs/business/contracts.md @@ -0,0 +1,50 @@ +# Contrats achat / vente + +Statut: `migration partielle` + +## BR-PT-CON-001 - Texte par defaut de pricing rule + +Source: `BR-PT-013` + +### Regle consultant + +Le texte de regle de pricing recurrent doit etre configure une seule fois et +repris automatiquement sur les nouvelles lignes achat et vente. + +### Notes developpeur + +- Configuration: `purchase_trade.configuration.pricing_rule`. +- Cibles: `purchase.line.pricing_rule`, `sale.line.pricing_rule`. +- Les lignes existantes ne sont pas modifiees retroactivement. + +## BR-PT-CON-002 - Delivery period coherent + +Source: `BR-PT-014` historique, doublon de numerotation a corriger + +### Regle consultant + +Une periode de livraison ne peut pas commencer apres sa date de fin. Une seule +borne renseignee reste acceptee. + +### Notes developpeur + +- Champs: `purchase.line.from_del`, `purchase.line.to_del`, + `sale.line.from_del`, `sale.line.to_del`. +- Validation attendue: bloquer si `from_del > to_del`. + +## BR-PT-CON-003 - Propagation des lieux stock dans Create Contracts + +Source: `BR-PT-024` + +### Regle consultant + +Quand un contrat miroir est cree depuis une quantite ouverte, les lieux +logistiques doivent etre proposes selon le flux source pour eviter la ressaisie. + +### Notes developpeur + +- Champs: `from_location`, `to_location`. +- Flux fournisseur vers client: recopier le couple source. +- Achat vers stock puis vente: `sale.from_location = purchase.to_location`. +- Vente depuis stock puis achat: `purchase.to_location = sale.from_location`. + diff --git a/modules/purchase_trade/docs/business/fees.md b/modules/purchase_trade/docs/business/fees.md new file mode 100644 index 0000000..47e9cbf --- /dev/null +++ b/modules/purchase_trade/docs/business/fees.md @@ -0,0 +1,55 @@ +# Fees + +Statut: `migration partielle` + +Voir aussi la page technique historique: `../fees.md`. + +## BR-PT-FEE-001 - Freight value depuis fee shipment + +Source: `BR-PT-003` + +### Regle consultant + +La valeur de fret affichee sur les documents facture vient du fee maritime du +shipment, pas d'un champ direct de la facture. + +### Notes developpeur + +- Retrouver le lot physique depuis la facture. +- Retrouver son `shipment_in`. +- Chercher le `fee.fee` avec `product.name = 'Maritime freight'`. +- Utiliser `fee.get_amount()`. + +## BR-PT-FEE-002 - Les fees lies aux lots privilegient les physiques + +Source: `BR-PT-021` + +### Regle consultant + +Un fee suit le lot virtuel tant qu'aucun lot physique n'est lie. Des qu'un lot +physique est lie, les lots physiques deviennent la base de calcul du fee. + +### Notes developpeur + +- Ne pas supprimer le lien virtuel: il reste le fallback. +- Quantite `ppack`: somme de `lot.lot_qt` des physiques. +- Modes quantitatifs: quantites courantes converties des physiques. +- La meme selection s'applique au PnL fee. +- Points de synchronisation: creation fee, lien `fee.lots`, changement de + `quantity_theorical`, weighing, suppression de physique. + +## BR-PT-FEE-003 - Fees `% rate` via delta de financement + +Source: `BR-PT-016` historique et notes `2026-04-30` + +### Regle consultant + +Les frais financiers en pourcentage se calculent avec le delta de financement +de la ligne d'estimation `BL date`, pas avec la date du jour. + +### Notes developpeur + +- Formule: `amount = unit_price * quantity * (price / 100) * fin_int_delta / 360`. +- Source du delta: ligne `Estimated date` avec `trigger = bldate`. +- Si aucune ligne `bldate` n'existe, ne pas calculer de montant `% rate`. + diff --git a/modules/purchase_trade/docs/business/glossary.md b/modules/purchase_trade/docs/business/glossary.md new file mode 100644 index 0000000..5987986 --- /dev/null +++ b/modules/purchase_trade/docs/business/glossary.md @@ -0,0 +1,22 @@ +# Glossaire purchase_trade + +Statut: `migration partielle` + +- `Purchase Line`: ligne d'achat. +- `Sale Line`: ligne de vente. +- `quantity_theorical`: quantite contractuelle theorique d'une ligne. +- `Virtual Lot`: lot de type `virtual`, representant un reliquat ouvert. +- `Physical Lot`: lot de type `physic`, representant une quantite executee. +- `lot.qt`: ligne de quantite ouverte, matchee ou rattachee a un shipment. +- `lot.qt ouvert`: `lot.qt` libre, sans lot oppose et sans shipment. +- `Shipment In`: shipment entrant utilise aussi pour les flux dropship dans ce module. +- `Dropship`: flux fournisseur vers client, sans passage par stock interne. +- `Inbound`: flux entrant classique qui ne correspond pas au dropship. +- `Basis`: mode de prix construit a partir d'un prix de marche et d'un premium. +- `Premium`: prime ou discount commercial ajoute au prix economique. +- `Linked currency`: saisie d'un prix dans une devise/unite liee, par exemple `USC/LB`. +- `Valuation`: lignes de PnL generees pour prix, fees, derivatives et MTM. +- `MTM`: mark-to-market applique aux lignes valorisables au marche. +- `Fee`: frais commercial ou logistique rattache a une ligne, un lot ou un shipment. +- `Report property`: propriete Python exposee pour simplifier un template Relatorio. + diff --git a/modules/purchase_trade/docs/business/invariants.md b/modules/purchase_trade/docs/business/invariants.md new file mode 100644 index 0000000..2fa25de --- /dev/null +++ b/modules/purchase_trade/docs/business/invariants.md @@ -0,0 +1,66 @@ +# Invariants structurants + +Statut: `migration partielle` + +Ces invariants doivent etre relus avant de modifier des flux `purchase_trade` +touchant lots, quantites, fees, PnL, factures ou templates. + +## INV-PT-001 - Le lot physique est le pont metier stable + +### Regle consultant + +Quand une information doit relier achat, vente, shipment et facture, le chemin +fonctionnel de reference passe par le lot physique. Il porte le lien entre les +contrats et l'execution logistique. + +### Notes developpeur + +- Source historique: `BR-PT-002`. +- Voir aussi: [lots-and-quantities.md](lots-and-quantities.md), + [matching.md](matching.md), [reports-templates.md](reports-templates.md). +- Champs frequents: `lot.line`, `lot.sale_line`, `lot_shipment_in`, + `lot_shipment_internal`, `lot_shipment_out`. + +## INV-PT-002 - Le reliquat ouvert ne doit pas doubler les lots physiques + +### Regle consultant + +Une quantite deja executee physiquement ne doit pas rester disponible comme +quantite ouverte. Le reliquat ouvert represente seulement ce qui reste a +executer. + +### Notes developpeur + +- Source historique: `BR-PT-020`. +- Le calcul doit tenir compte de la quantite contractuelle, des lots physiques + existants et des `lot.qt` deja matches ou shippes. + +## INV-PT-003 - Les fees utilisent leurs lots effectifs + +### Regle consultant + +Un fee ouvert suit le lot virtuel tant qu'il n'y a pas de lot physique. Des +qu'un ou plusieurs lots physiques sont lies au fee, ils deviennent la base +effective de calcul. + +### Notes developpeur + +- Source historique: `BR-PT-021`. +- Ne pas supprimer le lien virtuel: il reste le fallback si les physiques sont + retires. +- Voir [fees.md](fees.md). + +## INV-PT-004 - Les templates doivent rester simples + +### Regle consultant + +Les documents doivent afficher des informations metier stables, meme si le +chemin technique pour les retrouver est complexe. + +### Notes developpeur + +- Preferer des proprietes Python `report_*` aux expressions Genshi complexes. +- Ne pas supposer qu'une variable locale comme `shipment` existe partout dans + un `.fodt`. +- Voir [reports-templates.md](reports-templates.md). + diff --git a/modules/purchase_trade/docs/business/invoicing.md b/modules/purchase_trade/docs/business/invoicing.md new file mode 100644 index 0000000..ac3c51a --- /dev/null +++ b/modules/purchase_trade/docs/business/invoicing.md @@ -0,0 +1,24 @@ +# Facturation trade + +Statut: `migration partielle` + +## BR-PT-INV-001 - Padding facture provisoire vente + +Source: `BR-PT-019` et `../padding-invoice-accounting.md` + +### Regle consultant + +Le padding d'une facture provisoire vente augmente la quantite facturee pour +constituer une provision, sans modifier la quantite physique du lot. + +### Notes developpeur + +- Le padding global du wizard `lot.invoice` est reparti entre les lots + selectionnes. +- La ligne facture expose `Inc. padding`. +- Le lot conserve sa part dans `sale_invoice_padding`. +- La facture finale retire le padding de la quantite provisoire avant de + calculer le delta. +- Les ecritures d'extourne doivent relire la provisoire depuis + `lot.sale_invoice_line_prov`. + diff --git a/modules/purchase_trade/docs/business/lots-and-quantities.md b/modules/purchase_trade/docs/business/lots-and-quantities.md new file mode 100644 index 0000000..48a18e9 --- /dev/null +++ b/modules/purchase_trade/docs/business/lots-and-quantities.md @@ -0,0 +1,56 @@ +# Lots et quantites + +Statut: `migration partielle` + +## BR-PT-LOT-001 - Le lot physique est le pont metier + +Source: `BR-PT-002` + +### Regle consultant + +Le lot physique est la reference pour relier une quantite executee a son achat, +sa vente, son shipment et ses documents. + +### Notes developpeur + +- Champs: `lot.line`, `lot.sale_line`, `lot_shipment_in`, + `lot_shipment_internal`, `lot_shipment_out`. +- Utiliser ce chemin avant de creer un raccourci facture -> shipment. + +## BR-PT-LOT-002 - Le solde ouvert suit les lots physiques existants + +Source: `BR-PT-020` + +### Regle consultant + +Quand la quantite contractuelle change, le systeme recalcule le reliquat ouvert +en tenant compte des lots physiques deja crees. Il ne doit pas ajouter un delta +qui ferait apparaitre deux fois la meme quantite. + +### Notes developpeur + +- Cibles: `purchase.line.quantity_theorical`, `sale.line.quantity_theorical`. +- Quantite virtuelle cible = + `quantity_theorical - somme(lots physiques convertis dans l'unite ligne)`. +- `lot.qt` libre = + `quantite virtuelle cible - somme(lot.qt deja matches ou shippes)`. +- Bloquer avec `Please unlink or unmatch lot` si le solde devient negatif. +- Les fees de la ligne doivent etre resynchronises apres modification. + +## BR-PT-LOT-003 - Remove physical lot restaure le contexte ouvert + +Source: `BR-PT-022` + +### Regle consultant + +Un lot physique cree par erreur peut etre retire tant que son mouvement stock +n'est pas finalise. Si le lot etait deja shippe ou matche, l'utilisateur doit +confirmer car le contexte est sensible. + +### Notes developpeur + +- Autorise seulement si le `stock.move` lie est encore en `draft`. +- Restaurer la quantite dans `lot.qt` avec le shipment et/ou le lot oppose + d'origine. +- Agreger avec une ligne compatible si elle existe deja. + diff --git a/modules/purchase_trade/docs/business/lots-management.md b/modules/purchase_trade/docs/business/lots-management.md new file mode 100644 index 0000000..fd89c29 --- /dev/null +++ b/modules/purchase_trade/docs/business/lots-management.md @@ -0,0 +1,27 @@ +# Lots Management + +Statut: `migration partielle` + +## BR-PT-LOTMGT-001 - Separations matching, side et shipping status + +Source: `BR-PT-023` et notes `2026-05-09` + +### Regle consultant + +Le rapport Lots Management doit permettre de lire separement le matching +commercial, le sens achat/vente et l'avancement logistique. + +### Notes developpeur + +- Filtres: `Matching status`, `Side`, `Shipping status`, `Dimension`, + `Strategy`. +- Dates `As of` / `To`: `purchase.purchase_date` et `sale.sale_date`. +- `Unshipped`: aucun `shipment_in`. +- `Scheduled`: shipment `draft`. +- `Shipped`: shipment `started`. +- `Received`: shipment `received` ou `done`. +- `Shipment Type = Dropship` si `from_location.type = supplier` et + `to_location.type = customer`, sinon `Inbound`. +- `Mark as finished` masque seulement les reliquats ouverts / virtuels, pas + les lots physiques. + diff --git a/modules/purchase_trade/docs/business/matching.md b/modules/purchase_trade/docs/business/matching.md new file mode 100644 index 0000000..89c617c --- /dev/null +++ b/modules/purchase_trade/docs/business/matching.md @@ -0,0 +1,27 @@ +# Matching achat / vente + +Statut: `migration partielle` + +## BR-PT-MAT-001 - Create Contracts multi-lots conserve le matching source + +Source: `BR-PT-012` et doublon historique `BR-PT-013` + +### Regle consultant + +Le wizard `Create contracts` peut creer un seul contrat miroir depuis plusieurs +quantites ouvertes selectionnees. Chaque ligne creee doit rester reliee a son +lot source. + +### Notes developpeur + +- La quantite du wizard doit correspondre a la somme des quantites ouvertes + selectionnees. +- Creer une ligne par `lot.qt` source. +- Conserver `created_by_code = True` pour eviter les creations automatiques + parasites lors des validations. + +## Notes de migration + +Les regles sur `Apply matching` presentes dans les notes de session du +`2026-05-09` doivent encore etre promues ici. + diff --git a/modules/purchase_trade/docs/business/payments-banking.md b/modules/purchase_trade/docs/business/payments-banking.md new file mode 100644 index 0000000..977ff4a --- /dev/null +++ b/modules/purchase_trade/docs/business/payments-banking.md @@ -0,0 +1,21 @@ +# Paiements et banques + +Statut: `migration partielle` + +## BR-PT-PAY-001 - Distinguer banque tiers et banque compagnie + +Source: `BR-PT-018` + +### Regle consultant + +Un contrat distingue le compte bancaire du client ou fournisseur du compte +bancaire utilise par la compagnie courante pour encaisser ou payer. + +### Notes developpeur + +- Contrats: `sale.sale`, `purchase.purchase`. +- `bank_account`: compte de la party du contrat. +- `our_bank_account`: compte de la compagnie courante, selectionnable parmi + les comptes disponibles. +- La devise du contrat est prioritaire pour proposer un compte par defaut. + diff --git a/modules/purchase_trade/docs/business/pricing.md b/modules/purchase_trade/docs/business/pricing.md new file mode 100644 index 0000000..3ebee56 --- /dev/null +++ b/modules/purchase_trade/docs/business/pricing.md @@ -0,0 +1,53 @@ +# Pricing, basis, premium + +Statut: `migration partielle` + +## BR-PT-PRI-001 - Le premium fait partie du prix economique + +Source: `BR-PT-008` + +### Regle consultant + +Le premium ou discount saisi sur une ligne fait partie du prix economique, que +la ligne soit en prix fixe ou en basis. + +### Notes developpeur + +- `unit_price` reste le prix de base hors premium. +- Montant economique: `unit_price + premium converti si necessaire`. +- En basis, le premium s'applique aussi aux blocs valorises. + +## BR-PT-PRI-002 - Linked currency + +Source: `BR-PT-009` et `BR-PT-010` + +### Regle consultant + +Quand le prix est saisi dans une devise ou unite liee, le premium est exprime +dans ce meme repere puis converti pour les calculs internes. + +### Notes developpeur + +- Champs obligatoires si active: `linked_price`, `linked_currency`, + `linked_unit`. +- En `basis + linked currency`, `linked_price` represente le basis brut hors + premium. +- `amount` ajoute le premium converti. + +## BR-PT-PRI-003 - Pricing manuel + +Source: `BR-PT-016` et doublon historique `BR-PT-015` + +### Regle consultant + +En pricing manuel, l'utilisateur saisit uniquement la quantite fixee du jour et +le prix de marche. Les cumuls et prix moyens sont calcules automatiquement. + +### Notes developpeur + +- Champs saisis: `quantity`, `settl_price`. +- Champs derives: `fixed_qt`, `fixed_qt_price`, `unfixed_qt`, + `unfixed_qt_price`, `eod_price`, `last`. +- Groupe metier: `line + component` ou `sale_line + component`. +- Le composant choisi doit appartenir a la ligne courante. + diff --git a/modules/purchase_trade/docs/business/reports-templates.md b/modules/purchase_trade/docs/business/reports-templates.md new file mode 100644 index 0000000..c59463a --- /dev/null +++ b/modules/purchase_trade/docs/business/reports-templates.md @@ -0,0 +1,39 @@ +# Reports et templates + +Statut: `migration partielle` + +Voir aussi: + +- `../template-rules.md` +- `../template-properties.md` +- `../../../../notes/template_business_rules.md` + +## BR-PT-RPT-001 - Templates trade via proprietes Python + +Source: `template-rules.md`, `template-properties.md`, notes AGENTS + +### Regle consultant + +Un document trade doit afficher des informations metier fiables, sans dependre +d'expressions fragiles dans le fichier bureautique. + +### Notes developpeur + +- Preferer des proprietes Python simples, souvent prefixees `report_*`. +- Dans les placeholders XML, utiliser `"` et `'` plutot que des + antislashs. +- Pour les factures liees a vente/achat/shipment, privilegier le lot physique + comme pont. +- Verifier le cache `invoice_report_cache` avant de conclure qu'une action + report pointe vers le mauvais `.fodt`. +- Pour les templates shipment, preferer `records[0]...` ou des proprietes sur + `stock.shipment.in` plutot qu'une variable locale supposee. + +## Decisions deja documentees a migrer ensuite + +- `insurance.fodt`: compagnie courante, amount insured a 110%, surveyor. +- `packing_list.fodt`: date du jour, unites depuis `purchase.line`. +- `bill.fodt`: maturity date reelle et montant en lettres depuis le total. +- `invoice_ict.fodt` / `invoice_ict_final.fodt`: poids, shipments et lots. +- `sale_ict.fodt`: priorite lots et unite reelle. + diff --git a/modules/purchase_trade/docs/business/risk-credit-forex.md b/modules/purchase_trade/docs/business/risk-credit-forex.md new file mode 100644 index 0000000..8157c24 --- /dev/null +++ b/modules/purchase_trade/docs/business/risk-credit-forex.md @@ -0,0 +1,15 @@ +# Risque, credit, forex + +Statut: `placeholder` + +Cette page est reservee aux regles business sur le risque, le credit et les +ecarts de change. + +Aucune regle canonique `purchase_trade` n'a ete promue ici dans cette premiere +passe. Les notes comptables et forex existantes doivent etre relues avant toute +migration: + +- `notes/accounting/README.md` +- `notes/accounting/business_rules.md` +- `notes/accounting/reporting.md` + diff --git a/modules/purchase_trade/docs/business/sessions.md b/modules/purchase_trade/docs/business/sessions.md new file mode 100644 index 0000000..516a962 --- /dev/null +++ b/modules/purchase_trade/docs/business/sessions.md @@ -0,0 +1,26 @@ +# Journal de migration et sessions + +Statut: `non canonique` + +Cette page sert de routeur vers les notes historiques. Une note devient +canonique seulement quand elle est reprise dans une page thematique. + +## Sources historiques + +- `modules/purchase_trade/docs/business-rules.md` +- `modules/purchase_trade/docs/business-rules-architecture-proposal.md` +- `notes/business_rules.md` +- `notes/template_business_rules.md` + +## Notes deja partiellement promues + +- Session `2026-04-30`: PnL fees ouverts et `% rate`, promue dans + [fees.md](fees.md) et [valuation-pnl-mtm.md](valuation-pnl-mtm.md). +- Session `2026-05-01`: solde ouvert apres lots physiques et lots effectifs + des fees, promue dans [lots-and-quantities.md](lots-and-quantities.md) et + [fees.md](fees.md). +- Session `2026-05-06`: Remove physical lot, promue dans + [lots-and-quantities.md](lots-and-quantities.md). +- Session `2026-05-09`: Lots Management, promue partiellement dans + [lots-management.md](lots-management.md). + diff --git a/modules/purchase_trade/docs/business/shipments-execution.md b/modules/purchase_trade/docs/business/shipments-execution.md new file mode 100644 index 0000000..b9e9784 --- /dev/null +++ b/modules/purchase_trade/docs/business/shipments-execution.md @@ -0,0 +1,49 @@ +# Shipments et execution + +Statut: `migration partielle` + +## BR-PT-SHP-001 - Affectation controller par ecart a l'objectif + +Source: `BR-PT-014` + +### Regle consultant + +Le controller propose automatiquement est celui dont la zone a le plus grand +retard par rapport a son objectif. + +### Notes developpeur + +- Configuration: onglet `Execution` de `party.party`. +- La zone du shipment vient de `shipment.to_location.country`. +- Une region parente couvre ses sous-regions. +- `% achieved` compte seulement les shipments deja affectes a un controller. + +## BR-PT-SHP-002 - Couts SLA controller par pays et/ou lieu + +Source: `BR-PT-014-bis` + +### Regle consultant + +Un cout controller peut etre defini pour un pays, un lieu, ou le couple pays + +lieu. Le couple est le cas le plus specifique. + +### Notes developpeur + +- Matching: `country + location`, puis `location`, puis `country`. +- Le pays vient de `shipment.to_location.country`. + +## BR-PT-SHP-003 - Weight reports distants par lot + +Source: `BR-PT-015` + +### Regle consultant + +L'export distant par lot part du weight report global choisi par l'utilisateur +sur le shipment. + +### Notes developpeur + +- Exporter seulement les lots physiques des `incoming_moves`. +- Exiger au minimum `controller` et `returned_id` sur le shipment. +- Conserver les cles distantes et la date d'envoi sur le `weight.report`. + diff --git a/modules/purchase_trade/docs/business/valuation-pnl-mtm.md b/modules/purchase_trade/docs/business/valuation-pnl-mtm.md new file mode 100644 index 0000000..073441a --- /dev/null +++ b/modules/purchase_trade/docs/business/valuation-pnl-mtm.md @@ -0,0 +1,51 @@ +# Valuation, PnL, MTM + +Statut: `migration partielle` + +## BR-PT-VAL-001 - La valuation couvre achat, vente et sale-first + +Source: `BR-PT-004`, `BR-PT-006`, `BR-PT-011` + +### Regle consultant + +Le PnL doit exister pour les achats et pour les ventes, meme quand une vente +n'est pas encore matchee a un achat. + +### Notes developpeur + +- Une `sale.line` non matchee doit generer au minimum `sale priced`, `sale fee` + et `derivative` si applicable. +- Une sale basis sans detail de prix doit quand meme produire une ligne a zero + ou au prix economique fallback selon la regle applicable. +- Ne pas attacher arbitrairement une sale unique si plusieurs sales sont + matchees au meme ouvert. + +## BR-PT-VAL-002 - References de valuation + +Source: `BR-PT-005` + +### Regle consultant + +La reference de PnL doit decrire la nature de la ligne valorisee: achat ou +vente, ouverte ou physique. + +### Notes developpeur + +- References autorisees: `Purchase/Open`, `Purchase/Physic`, `Sale/Open`, + `Sale/Physic`. +- Un lot virtuel ne doit pas sortir avec une reference physique. + +## BR-PT-VAL-003 - MTM hors fees + +Source: `BR-PT-007` + +### Regle consultant + +Le mark-to-market s'applique aux prix et aux derives, pas aux frais. + +### Notes developpeur + +- MTM autorise pour `pur. priced`, `sale priced`, `derivative`. +- Fees hors MTM: `pur. fee`, `sale fee`, `shipment fee`, `line fee`. +- Pour les fees: `mtm_price`, `mtm`, `strategy` doivent rester vides. + diff --git a/modules/purchase_trade/docs/index.md b/modules/purchase_trade/docs/index.md index 7a75ddc..4db4ad6 100644 --- a/modules/purchase_trade/docs/index.md +++ b/modules/purchase_trade/docs/index.md @@ -1,12 +1,39 @@ -# Purchase Trade - Business Rules +# Purchase Trade - Documentation metier -Bienvenue dans la documentation métier du module Purchase Trade. +Bienvenue dans la documentation metier et technique du module `purchase_trade`. -## Pages disponibles +Ce fichier reste le point d'entree du wiki. Le decoupage ci-dessous separe les +regles lisibles par les consultants des notes utiles aux developpeurs. -- [Business Rules](business-rules.md) -- [Fees](fees.md) +## Menu principal + +- [Guide de lecture](business/README.md) +- [Index thematique des regles business](business/INDEX.md) +- [Glossaire](business/glossary.md) +- [Invariants structurants](business/invariants.md) +- [Journal de migration et sessions](business/sessions.md) + +## Regles par domaine + +- [Contrats achat / vente](business/contracts.md) +- [Lots et quantites](business/lots-and-quantities.md) +- [Matching achat / vente](business/matching.md) +- [Shipments et execution](business/shipments-execution.md) +- [Pricing, basis, premium](business/pricing.md) +- [Fees](business/fees.md) +- [Valuation, PnL, MTM](business/valuation-pnl-mtm.md) +- [Facturation trade](business/invoicing.md) +- [Pont comptable](business/accounting-bridge.md) +- [Paiements et banques](business/payments-banking.md) +- [Reports et templates](business/reports-templates.md) +- [Risque, credit, forex](business/risk-credit-forex.md) +- [Lots Management](business/lots-management.md) + +## Anciennes pages conservees pendant la migration + +- [Business Rules historiques](business-rules.md) +- [Fees - notes techniques existantes](fees.md) - [Padding Invoice Accounting](padding-invoice-accounting.md) - [Template Properties](template-properties.md) - [Template Rules](template-rules.md) -- [Architecture Proposal](business-rules-architecture-proposal.md) \ No newline at end of file +- [Architecture Proposal](business-rules-architecture-proposal.md)