<!-- Generated from docs_source/business by docs/tools/render_business_docs.py. -->

# Valuation, PnL, MTM

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`

### Règle consultant

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 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 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 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 matchées au même ouvert.
</li>
</ul>

## BR-PT-VAL-002 - Références de valuation

Source: `BR-PT-005`

### Règle consultant

La référence de PnL doit décrire la nature de la ligne valorisée: achat ou
vente, ouverte ou physique.

### 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;">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>
</ul>

## BR-PT-VAL-003 - MTM hors fees

Source: `BR-PT-007`

### Règle consultant

Le mark-to-market s'applique aux prix et aux dérivés, pas aux frais.

### 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 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&#x27;achat liée.
</li>
<li style="margin:0.38rem 0;">Le PnL d&#x27;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&#x27;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&#x27;achat propriétaire.
</li>
</ul>
