Aller au contenu

Valuation, PnL, MTM

Status: partial migration

Language: en
Mirror page: 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

  • An unmatched sale.line must generate at least sale priced, sale fee, and derivative when applicable.
  • A basis sale with no price detail must still produce a zero line or the economic fallback price according to the applicable rule.
  • Do not arbitrarily attach a single sale when several sales are matched to the same open balance.

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

  • Allowed references: Purchase/Open, Purchase/Physic, Sale/Open, Sale/Physic.
  • A virtual lot must not be output with a physical reference.

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

  • MTM is allowed for pur. priced, sale priced, derivative.
  • Fees are outside MTM: pur. fee, sale fee, shipment fee, line fee.
  • For fees: mtm_price, mtm, strategy must stay empty.

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.

  • A new generation replaces the previous generation for the same economic reality.
  • An unmatched sale owns its own PnL.
  • A matched sale is owned by the linked purchase line.
  • The PnL of a matched sale must not be generated twice: once from the sale side and once from the purchase side.

Developer Notes

  • Before creating rows in valuation.valuation.line, delete the current snapshot with the same economic identity.
  • Economic identity:
    • sale_line when present, otherwise line;
    • lot;
    • type;
    • reference;
    • counterparty;
    • product;
    • state;
    • strategy.
  • Do not include in the identity:
    • date;
    • price;
    • quantity;
    • amount;
    • mtm_price;
    • mtm.
  • These fields are recalculated results and must be replaced by the latest generation.
  • generate_from_sale_line() does not create a sale snapshot when the sale.line is already matched to a purchase.line; it redirects to the owner purchase line generation.