Bug pnl fee
This commit is contained in:
@@ -19,7 +19,7 @@ Statut: `migration partielle`
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Fees, freight, lots effectifs, <code>% rate</code>: <a href="fees.md">fees.md</a>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Valuation, PnL, MTM, derivatives: <a href="valuation-pnl-mtm.md">valuation-pnl-mtm.md</a>
|
||||
<li style="margin:0.38rem 0;">Valuation, PnL, MTM, derivatives: <a href="valuation-pnl-mtm.md">FR</a> / <a href="valuation-pnl-mtm.en.md">EN</a>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Factures provisoires/finales, padding: <a href="invoicing.md">invoicing.md</a>
|
||||
</li>
|
||||
@@ -78,6 +78,8 @@ Statut: `migration partielle`
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>BR-PT-VAL-003</code>: MTM hors fees.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>BR-PT-VAL-004</code>: snapshot courant PnL et identite economique.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>BR-PT-INV-001</code>: padding facture provisoire vente.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>BR-PT-ACC-001</code>: Validate facture client attribue le numero.
|
||||
|
||||
132
modules/purchase_trade/docs/business/valuation-pnl-mtm.en.md
Normal file
132
modules/purchase_trade/docs/business/valuation-pnl-mtm.en.md
Normal file
@@ -0,0 +1,132 @@
|
||||
<!-- Generated from docs_source/business by docs/tools/render_business_docs.py. -->
|
||||
|
||||
# Valuation, PnL, MTM
|
||||
|
||||
Status: `partial migration`
|
||||
|
||||
Language: `en`<br>
|
||||
Mirror page: [valuation-pnl-mtm.md](valuation-pnl-mtm.md)
|
||||
|
||||
## BR-PT-VAL-001 - Valuation covers purchase, sale, and sale-first flows
|
||||
|
||||
Source: `BR-PT-004`, `BR-PT-006`, `BR-PT-011`
|
||||
|
||||
### Consultant Rule
|
||||
|
||||
PnL must exist for purchases and for sales, even when a sale is not yet matched
|
||||
to a purchase.
|
||||
|
||||
### Developer Notes
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">An unmatched <code>sale.line</code> must generate at least <code>sale priced</code>, <code>sale fee</code>, and <code>derivative</code> when applicable.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">A basis sale with no price detail must still produce a zero line or the economic fallback price according to the applicable rule.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Do not arbitrarily attach a single sale when several sales are matched to the same open balance.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## BR-PT-VAL-002 - Valuation references
|
||||
|
||||
Source: `BR-PT-005`
|
||||
|
||||
### Consultant Rule
|
||||
|
||||
The PnL reference must describe the nature of the valued line: purchase or sale,
|
||||
open or physical.
|
||||
|
||||
### Developer Notes
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">Allowed references: <code>Purchase/Open</code>, <code>Purchase/Physic</code>, <code>Sale/Open</code>, <code>Sale/Physic</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">A virtual lot must not be output with a physical reference.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## BR-PT-VAL-003 - MTM excludes fees
|
||||
|
||||
Source: `BR-PT-007`
|
||||
|
||||
### Consultant Rule
|
||||
|
||||
Mark-to-market applies to prices and derivatives, not to fees.
|
||||
|
||||
### Developer Notes
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">MTM is allowed for <code>pur. priced</code>, <code>sale priced</code>, <code>derivative</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Fees are outside MTM: <code>pur. fee</code>, <code>sale fee</code>, <code>shipment fee</code>, <code>line fee</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">For fees: <code>mtm_price</code>, <code>mtm</code>, <code>strategy</code> must stay empty.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## BR-PT-VAL-004 - Current snapshot and economic identity
|
||||
|
||||
Source: session `2026-05-14`
|
||||
|
||||
### Consultant Rule
|
||||
|
||||
`valuation_valuation_line` represents the latest known PnL image.
|
||||
It is not a history table.
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">A new generation replaces the previous generation for the same economic reality.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">An unmatched sale owns its own PnL.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">A matched sale is owned by the linked purchase line.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">The PnL of a matched sale must not be generated twice: once from the sale side and once from the purchase side.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
### Developer Notes
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">Before creating rows in <code>valuation.valuation.line</code>, delete the current snapshot with the same economic identity.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Economic identity:
|
||||
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
|
||||
<li style="margin:0.38rem 0;"><code>sale_line</code> when present, otherwise <code>line</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>lot</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>type</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>reference</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>counterparty</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>product</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>state</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>strategy</code>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Do not include in the identity:
|
||||
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
|
||||
<li style="margin:0.38rem 0;"><code>date</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>price</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>quantity</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>amount</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>mtm_price</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>mtm</code>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">These fields are recalculated results and must be replaced by the latest generation.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>generate_from_sale_line()</code> does not create a sale snapshot when the <code>sale.line</code> is already matched to a <code>purchase.line</code>; it redirects to the owner purchase line generation.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -4,39 +4,42 @@
|
||||
|
||||
Statut: `migration partielle`
|
||||
|
||||
Langue: `fr`<br>
|
||||
Page miroir: [valuation-pnl-mtm.en.md](valuation-pnl-mtm.en.md)
|
||||
|
||||
## BR-PT-VAL-001 - La valuation couvre achat, vente et sale-first
|
||||
|
||||
Source: `BR-PT-004`, `BR-PT-006`, `BR-PT-011`
|
||||
|
||||
### Regle consultant
|
||||
### Règle consultant
|
||||
|
||||
Le PnL doit exister pour les achats et pour les ventes, meme quand une vente
|
||||
n'est pas encore matchee a un achat.
|
||||
Le PnL doit exister pour les achats et pour les ventes, même quand une vente
|
||||
n'est pas encore matchée à un achat.
|
||||
|
||||
### Notes developpeur
|
||||
### Notes développeur
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">Une <code>sale.line</code> non matchee doit generer au minimum <code>sale priced</code>, <code>sale fee</code> et <code>derivative</code> si applicable.
|
||||
<li style="margin:0.38rem 0;">Une <code>sale.line</code> non matchée doit générer au minimum <code>sale priced</code>, <code>sale fee</code> et <code>derivative</code> si applicable.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Une sale basis sans detail de prix doit quand meme produire une ligne a zero ou au prix economique fallback selon la regle applicable.
|
||||
<li style="margin:0.38rem 0;">Une sale basis sans détail de prix doit quand même produire une ligne à zéro ou au prix économique fallback selon la règle applicable.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Ne pas attacher arbitrairement une sale unique si plusieurs sales sont matchees au meme ouvert.
|
||||
<li style="margin:0.38rem 0;">Ne pas attacher arbitrairement une sale unique si plusieurs sales sont matchées au même ouvert.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## BR-PT-VAL-002 - References de valuation
|
||||
## BR-PT-VAL-002 - Références de valuation
|
||||
|
||||
Source: `BR-PT-005`
|
||||
|
||||
### Regle consultant
|
||||
### Règle consultant
|
||||
|
||||
La reference de PnL doit decrire la nature de la ligne valorisee: achat ou
|
||||
La référence de PnL doit décrire la nature de la ligne valorisée: achat ou
|
||||
vente, ouverte ou physique.
|
||||
|
||||
### Notes developpeur
|
||||
### Notes développeur
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">References autorisees: <code>Purchase/Open</code>, <code>Purchase/Physic</code>, <code>Sale/Open</code>, <code>Sale/Physic</code>.
|
||||
<li style="margin:0.38rem 0;">Références autorisées: <code>Purchase/Open</code>, <code>Purchase/Physic</code>, <code>Sale/Open</code>, <code>Sale/Physic</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Un lot virtuel ne doit pas sortir avec une reference physique.
|
||||
</li>
|
||||
@@ -46,17 +49,84 @@ vente, ouverte ou physique.
|
||||
|
||||
Source: `BR-PT-007`
|
||||
|
||||
### Regle consultant
|
||||
### Règle consultant
|
||||
|
||||
Le mark-to-market s'applique aux prix et aux derives, pas aux frais.
|
||||
Le mark-to-market s'applique aux prix et aux dérivés, pas aux frais.
|
||||
|
||||
### Notes developpeur
|
||||
### Notes développeur
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">MTM autorise pour <code>pur. priced</code>, <code>sale priced</code>, <code>derivative</code>.
|
||||
<li style="margin:0.38rem 0;">MTM autorisé pour <code>pur. priced</code>, <code>sale priced</code>, <code>derivative</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Fees hors MTM: <code>pur. fee</code>, <code>sale fee</code>, <code>shipment fee</code>, <code>line fee</code>.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Pour les fees: <code>mtm_price</code>, <code>mtm</code>, <code>strategy</code> doivent rester vides.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## BR-PT-VAL-004 - Snapshot courant et identité économique
|
||||
|
||||
Source: session `2026-05-14`
|
||||
|
||||
### Règle consultant
|
||||
|
||||
`valuation_valuation_line` représente la dernière image connue du PnL.
|
||||
Elle n'est pas un historique.
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">Une nouvelle génération remplace la génération précédente pour la même réalité économique.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Une vente non matchée porte son propre PnL.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Une vente matchée est portée par la ligne d'achat liée.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Le PnL d'une vente matchée ne doit pas être généré deux fois: une fois côté vente et une fois côté achat.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
### Notes développeur
|
||||
|
||||
<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
|
||||
<li style="margin:0.38rem 0;">Avant création dans <code>valuation.valuation.line</code>, supprimer le snapshot courant ayant la même identité économique.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Identité économique:
|
||||
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
|
||||
<li style="margin:0.38rem 0;"><code>sale_line</code> si elle existe, sinon <code>line</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>lot</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>type</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>reference</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>counterparty</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>product</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>state</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>strategy</code>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Ne pas inclure dans l'identité:
|
||||
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
|
||||
<li style="margin:0.38rem 0;"><code>date</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>price</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>quantity</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>amount</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>mtm_price</code>;
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>mtm</code>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;">Ces champs sont des résultats recalculés et doivent être remplacés par la dernière génération.
|
||||
</li>
|
||||
<li style="margin:0.38rem 0;"><code>generate_from_sale_line()</code> ne crée pas de snapshot vente si la <code>sale.line</code> est déjà matchée à une <code>purchase.line</code>; il redirige vers la génération de la ligne d'achat propriétaire.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user