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.