diff --git a/AGENTS.md b/AGENTS.md index 11d9fbd..dc8c316 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -133,7 +133,9 @@ Toujours fournir: - `sale_ict.fodt`: meme priorite lots; les mots suivent l'unite reelle; le total convertit vers une unite commune, qui est celle du lot virtuel seulement s'il y a un seul lot virtuel sur tout le report. - `lot.report.r_del_period`: utiliser `sale.line.del_period` pour `lot_s` sans `lot_p`, sinon `purchase.line.del_period`. - `lot.do_weighing`: `lot_qt` editable et ecrasement direct de `lot.lot_qt`. - - `account.invoice`: `Validate` cree aussi le `account.move` pour les factures client; `Post` ne doit plus forcer une fresh session sur ce flux. - - `pricing.pricing`: saisie manuelle autorisee meme sans composant; `eod_price` non editable et calcule en prix moyen pondere; `last=True` gere par groupe `line + component`, choisi sur la `pricing_date` la plus grande. + - `account.invoice`: `Validate` cree aussi le `account.move` pour les factures client, attribue aussi le `number` a ce stade pour les factures client comme fournisseur; `Post` ne doit plus forcer une fresh session sur ce flux. + - `pricing.pricing`: saisie manuelle autorisee meme sans composant; en manuel, l'utilisateur saisit seulement `Qt` et `Settl. price`; `fixed_qt`, `fixed_qt_price`, `unfixed_qt`, `unfixed_qt_price` et `eod_price` sont derives automatiquement. + - `pricing.pricing`: en manuel, `fixed_qt` = cumul des `quantity`, `fixed_qt_price` = moyenne ponderee cumulee des `settl_price`, `unfixed_qt` = reste a fixer, `unfixed_qt_price` = `settl_price` de la ligne. + - `pricing.pricing`: `eod_price` reste non editable et calcule en prix moyen pondere; `last=True` gere par groupe `line + component`, choisi sur la `pricing_date` la plus grande. - `purchase_trade`: `trader` filtre sur `TRADER`, `operator` sur `OPERATOR`; fallback sur `quantity` si `quantity_theorical` est vide dans les quotas/pricings. - `sale.line` / `purchase.line`: en mode `basis`, sans `price_component`, le `Price` et le `Fix. progress` de la ligne doivent remonter depuis la ligne `Summary` sans component. diff --git a/modules/account_invoice/invoice_ict.fodt b/modules/account_invoice/invoice_ict.fodt index 44e6484..becafa7 100644 --- a/modules/account_invoice/invoice_ict.fodt +++ b/modules/account_invoice/invoice_ict.fodt @@ -8,13 +8,13 @@ LibreOffice/7.6.0.3$Windows_X86_64 LibreOffice_project/69edd8b8ebc41d00b4de3915dc82f8f0fc3b6265 - PT3H18M53S - 11 + PT3H20M59S + 12 - 2026-04-10T09:15:22.359000000 + 2026-04-10T10:30:16.567000000 - 21255 + 6879 0 27264 13187 @@ -23,12 +23,12 @@ view2 - 5639 - 24783 + 13275 + 15563 0 - 21255 + 6879 27263 - 34440 + 20064 0 0 false @@ -101,7 +101,7 @@ false false false - 431449 + 523469 84510 false false @@ -174,7 +174,7 @@ - + @@ -771,24 +771,28 @@ - + - + - + - + + + + + - + @@ -3981,8 +3985,7 @@ </for> - <invoice.report_incoterm> - ALL DETAILS AND SPECIFICATIONS AS PER BENEFICIARY + <invoice.report_incoterm> @@ -4062,10 +4065,10 @@ WE CERTIFY THAT THE MERCHANDISE IS OF <invoice.report_origin or ''>ORIGIN - BANK: EFG BANK SA - IBAN : CH8808667007168111027 - SwifT Code: EFGBCHZZ - + BANK: EFG BANK SA + IBAN : CH8808667007168111027 + SwifT Code: EFGBCHZZ + <format_currency(invoice.total_amount, invoice.party.lang, invoice.currency)> @@ -4077,6 +4080,7 @@ + NET LANDED WEIGHTS, ACTUAL TARE, NO FRANCHISE diff --git a/modules/purchase_trade/AGENTS.md b/modules/purchase_trade/AGENTS.md index 3e35915..8433c0e 100644 --- a/modules/purchase_trade/AGENTS.md +++ b/modules/purchase_trade/AGENTS.md @@ -102,6 +102,15 @@ de negoce physique: - le `unit_price` doit rester un prix de base, hors `premium` - le `premium` doit impacter le prix total economique et donc le `amount`, aussi bien en `priced` qu'en `basis` + - dans `pricing.pricing` en saisie manuelle, l'utilisateur renseigne + seulement `quantity` et `settl_price` + - `fixed_qt`, `fixed_qt_price`, `unfixed_qt`, `unfixed_qt_price` et + `eod_price` sont des valeurs derivees et ne doivent pas etre saisies a la + main + - en manuel, `fixed_qt` = cumul des `quantity` du groupe trie par + `pricing_date` + - en manuel, `fixed_qt_price` = moyenne ponderee cumulee des `settl_price` + - en manuel, `unfixed_qt_price` = `settl_price` de la ligne - pour les documents commerciaux / facture, une ligne `basis` affiche le `premium` comme prix visible, pas le prix economique total - si `linked currency` est active, le `premium` est saisi dans la devise / @@ -159,6 +168,12 @@ de negoce physique: - Le calcul du prix peut diverger entre `unit_price`, `linked_price`, `lot_price` et valuation si le premium n'est pas traite explicitement dans chaque maillon. +- Sur `account.invoice`, le workflow `Validate` doit maintenant aligner + fournisseur et client pour: + - creation du `account.move` + - attribution du `number` + - `Post` ne doit pas reintroduire une difference de session/fresh login cote + client ## 7) Definition of done (module `purchase_trade`) diff --git a/modules/purchase_trade/docs/business-rules.md b/modules/purchase_trade/docs/business-rules.md index 0c706e8..33671ec 100644 --- a/modules/purchase_trade/docs/business-rules.md +++ b/modules/purchase_trade/docs/business-rules.md @@ -1,8 +1,8 @@ # Business Rules - Purchase Trade Statut: `draft` -Version: `v0.4` -Derniere mise a jour: `2026-04-02` +Version: `v0.5` +Derniere mise a jour: `2026-04-10` Owner metier: `a completer` Owner technique: `a completer` @@ -333,8 +333,52 @@ Owner technique: `a completer` - seuls les lots physiques des `incoming_moves` du shipment sont exportes - l'action exige au minimum un `controller` et un `returned_id` sur le shipment - - les cles renvoyees par le systeme distant et la date d'envoi sont - conservees sur le `weight.report` local +- les cles renvoyees par le systeme distant et la date d'envoi sont + conservees sur le `weight.report` local +- Priorite: + - `importante` + +### BR-PT-016 - En pricing manuel, seules la quantite fixee du jour et le prix de marche sont saisis + +- Intent: simplifier la saisie utilisateur et garantir une coherence unique + entre les colonnes de `pricing.pricing`. +- Description: + - Pour une ligne de `pricing.pricing` en mode manuel, l'utilisateur ne doit + saisir que: + - `quantity` + - `settl_price` + - Les autres colonnes de suivi sont derivees automatiquement sur tout le + groupe metier (`line + component` ou `sale_line + component`) trie par + `pricing_date`. +- Resultat attendu: + - `fixed_qt` = cumul des `quantity` + - `fixed_qt_price` = moyenne ponderee cumulee des `settl_price` + - `unfixed_qt` = quantite de base de la ligne - `fixed_qt` + - `unfixed_qt_price` = `settl_price` de la ligne + - `eod_price` = moyenne ponderee entre jambe fixee et non fixee + - `last=True` reste unique par groupe et suit la plus grande `pricing_date` +- Hors scope: + - la generation automatique des lignes quand `pricing.component.auto = True` + ne doit pas changer de comportement +- Priorite: + - `structurante` + +### BR-PT-017 - Le workflow Validate des factures client doit aussi attribuer le numero + +- Intent: aligner le comportement des factures client et fournisseur au moment + de `Validate`. +- Description: + - Lors du workflow `Validate` sur `account.invoice`, une facture client + (`type = out`) doit maintenant: + - creer son `account.move` + - recevoir son `number` + - La numerotation ne doit plus etre repoussee au `Post` cote client. +- Resultat attendu: + - a l'issue de `Validate`, une facture fournisseur ou client possede deja: + - son `account.move` + - son `number` + - `Post` conserve son role de posting comptable sans reintroduire de + difference de session/fresh login cote client - Priorite: - `importante` - Resultat attendu: diff --git a/notes/template_business_rules.md b/notes/template_business_rules.md index e37018a..56d6877 100644 --- a/notes/template_business_rules.md +++ b/notes/template_business_rules.md @@ -75,10 +75,16 @@ Scope: templates Relatorio + ponts `report_*` Python. - dans `Do weighing`, `lot_qt` doit etre editable et ecraser directement `lot.lot_qt`. - Factures client / fournisseur: - `Validate` cree aussi le `account.move` pour les factures client. + - `Validate` attribue aussi le `number` pour les factures client; la numerotation ne doit plus attendre `Post` cote `out`. - `Post` ne doit plus forcer une fresh session / demande de mot de passe sur ce flux. - Pricing: - `pricing.pricing` peut etre saisi manuellement meme sans composant. - - `fixed_qt`, `fixed_qt_price`, `unfixed_qt`, `unfixed_qt_price` sont editables. + - en manuel, l'utilisateur saisit seulement `quantity` et `settl_price`. + - `fixed_qt`, `fixed_qt_price`, `unfixed_qt`, `unfixed_qt_price` sont derives automatiquement et restent non editables. + - `fixed_qt` = cumul des `quantity` du groupe. + - `fixed_qt_price` = moyenne ponderee cumulee des `settl_price`. + - `unfixed_qt` = quantite de base restante a fixer. + - `unfixed_qt_price` = `settl_price` de la ligne. - `eod_price` reste non editable et suit le prix moyen pondere. - le mode auto suit la meme formule. - `last` est gere par groupe metier (`line + component`), avec un seul `last=True` par groupe.