# Valuation, PnL, MTM Statut: `migration partielle` Langue: `fr`
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 - Une `sale.line` non matchée doit générer au minimum `sale priced`, `sale fee` et `derivative` si applicable. - 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. - Ne pas attacher arbitrairement une sale unique si plusieurs sales sont matchées au même ouvert. ## 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 - Références autorisées: `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` ### Règle consultant Le mark-to-market s'applique aux prix et aux dérivés, pas aux frais. ### Notes développeur - MTM autorisé 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. ## 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. - Une nouvelle génération remplace la génération précédente pour la même réalité économique. - Une vente non matchée porte son propre PnL. - Une vente matchée est portée par la ligne d'achat liée. - 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. ### Notes développeur - Avant création dans `valuation.valuation.line`, supprimer le snapshot courant ayant la même identité économique. - Identité économique: - `sale_line` si elle existe, sinon `line`; - `lot`; - `type`; - `reference`; - `counterparty`; - `product`; - `state`; - `strategy`. - Ne pas inclure dans l'identité: - `date`; - `price`; - `quantity`; - `amount`; - `mtm_price`; - `mtm`. - Ces champs sont des résultats recalculés et doivent être remplacés par la dernière génération. - `generate_from_sale_line()` ne crée pas de snapshot vente si la `sale.line` est déjà matchée à une `purchase.line`; il redirige vers la génération de la ligne d'achat propriétaire.