Skip to main content

Blotter (/org/[orgId]/blotter)

Purpose: all positions across the active party, plus exposure summary and FpML interchange. Who uses it: traders, risk, ops. MARS analog: this is the MARS portfolio blotter — positions, NPV, DV01, exposure header. See SWPM / MARS parity. Source: app/src/features/blotter/.

Blotter — full table

Exposure header

Top of page. Aggregates across all open swaps in the active party's netting set.

CellMeaning
NotionalΣ notional by currency
NPVΣ NPV in CSA reporting ccy
Collateral (zone)Posted vs required, signed CSB direction
Scheduler pillON / OFF — pings oracle health

Blotter — exposure header

Swap table columns

ColumnSource
FamilyIRS / OIS / BASIS / XCCY / CDS
DirectionPay / Receive (red / green) for traders; pair-aware leg detail for operator / regulator viewers
Notional + ccyTrade payload; compact form ($10M, €25M) — same shape across blotter, regulator oversight, and operator surfaces
Tenor / MaturityTrade dates
Coupon / SpreadPer-leg config
NPVLive from pricing engine — viewer-relative (see below)
DV01Same sign convention as NPV
TrendSparkline from CurveSnapshot history, sign-aligned to the viewer's NPV
StatusProposed / Active / Disputed / Matured

Rows are clickable — opens the row drawer.

Viewer-relative NPV

NPV, DV01, and the trend sparkline are flipped at the row-mapper boundary (app/src/features/blotter/workflow-to-row.ts) so that bilateral counterparties read mirror-image MTM on the same trade — if Goldman shows +$9.5M on the BOOK RISK tile, JPMorgan shows −$9.5M. The pricing engine itself is viewer-agnostic; the flip lives in the UI layer.

See pricing & curves — viewer-relativity for the architectural detail and the symmetry test that locks the invariant.

Valuation-stale banner

When any input curve has aged past the staleness threshold (default 10 min, configurable via app/src/features/operator/hooks/use-curve-staleness.ts::CURVE_STALENESS_MINUTES), a yellow banner appears above the table naming the affected curves (e.g. "USD USD-EFFR"). NPV / DV01 on rows that depend on those curves can drift until the publisher catches up.

In demo profile the demo curve ticker refreshes every seeded projection (including secondary indices like USD-EFFR) every 10s, so the banner should stay hidden unless the oracle service is down.

Row drawer

Blotter — row drawer

Shows full trade payload, lifecycle history (events), and per-period cashflows. Actions depend on role + state:

ActionVisible toWhen
Accept proposalcounterpartyproposal-state, you are the counterparty
Reject proposalcounterpartyproposal-state, you are the counterparty
Withdraw proposalproposerproposal-state, you are the proposer
Trigger lifecycle (manual)operatordemo only (scheduler.manualOverridesEnabled: true)
Settle (manual)operatordemo only
Mature (manual)operatordemo only
Export FpMLanyalways — downloads FpML XML

FpML import / export

  • Import — top-bar button on the workspace, accepts FpML XML, hydrates as a draft.
  • Export — per-row drawer action; emits Daml-Finance-equivalent FpML XML.

See FpML Import / Export.

Filters

(Top of table — TODO if/when we add filter chips.)

Configurable via yaml

yaml keyUI effect
observables.*.enabledHides products from the family filter
scheduler.manualOverridesEnabledHides Trigger / Settle / Mature buttons
csa.valuationCcyCurrency for NPV and Collateral cells