Skip to content

Dashboard

The Dashboard is the default Atlas workspace. The main area is an AG Grid–based positions view fed by the REST position snapshot plus merged WebSocket/live-store updates. A draggable vertical split separates this primary pane from an optional sidebar stack of widgets (defaults: P&L summary, Risk, Orders). Use Add widget on the toolbar to attach optional widgets such as Booked trades (from the Trades module).

Resize panels by dragging the split grip between primary and sidebar; widget layouts persist locally (atlas.dashboard.workspace.v1).


AreaRole
ToolbarSaved grid views, add/remove sidebar widgets, reset dashboard layout
Grid tabsMultiple tabs over the positions grid; each tab remembers column/group/filter layout separately (dashboard module scope)
Positions gridSnapshot positions (SnapshotPosition) with pivot/group sidebar, charts, export
Sidebar widgetsCollapsible panels—typically P&L Summary, Risk (includes embedded exposure bars), Orders (TradeBlotterPanel)
Detail drawerOpens when you select a leaf position row (position_line_key present)
Error bannerShown if /positions/snapshot fails (with retry indication while TanStack Query refetches)

The Book tree panel lists live positions from the client store, grouped by book_id. Under each book it shows instrument_family values with a count of position rows in that family.

This is a lightweight structural rollup derived from streamed/merged grid data—not a separate navigational hierarchy selector. Use grouping or filters on the positions grid (for example by book_name, desk_id, entity_id) when you need entity/desk/strategy breakdowns from the full snapshot record.


The grid renders SnapshotPosition rows from the frontend types package (frontends/atlas-web). Features include:

  • Row grouping / pivot: row group panel always visible; pivot panel enabled; layouts persist per tab.
  • Side bar: Columns / filters panel from the shared Atlas AG Grid theme.
  • Cell flashing: optional directional highlights when values change (context menu).
  • Context menu: decimal places, row height, font size, copy, chart range, CSV export.
  • Selection: single-row selection; selecting a leaf row opens the detail drawer.

Default numeric formatting uses your grid preference decimal count (via context menu).

Columns are defined in positionsGridColumnDefs.ts, aligned with Qt defaults where noted in source. Default visible is Yes when hide is false or omitted, No when hide: true.

UI nameAPI field / colIdDefault visibleNotes
InstrumentinstrumentYessymbol → else venue_symbol → else instrument_id
TickertickerYesSame display chain as Instrument
SymbolsymbolNoRaw symbol field
Venue Symvenue_symbolNo
Instrument IDinstrument_idNo
Asset Classasset_classYesDisplays instrument_family
CCYdenomination_ccyYesDenomination currency
ISINisinNo
CUSIPcusipNo
FIGIfigiNo
Net Qtyquantity_signedYes
Long Qtyqty_longNoDerived from quantity_signed (non-positive → "0")
Short Qtyqty_shortNoDerived from quantity_signed (non-negative → "0")
Notionaloutstanding_notionalYes
Multcontract_multiplierNo
Face Amtface_amountNo
Qty Basisquantity_basisNo
Inst Familyinstrument_familyNoAlso surfaced under Asset Class
Inst Kindinstrument_kindNo
Mkt Pricemark_priceYes
Mkt Valuemarket_value_functionalYes
Clean MVclean_market_value_functionalNo
Dirty MVdirty_market_value_functionalNo
Accruedaccrued_interest_functionalNo
Mark Typemark_typeNo
FX Ratefx_rate_to_functionalNo
Mark CCYmark_currencyNo
YTMyield_to_maturityNo
Unreal P&Lunrealized_pnl_functionalYes
Day P&Lpnl_functional_1dYes
Valuationvaluation_statusYesDerived label from extensions.valuation_staleness_ms (see below)
MTD P&Lpnl_functional_1mYesField name *_1m in API payload
YTD P&Lpnl_functional_ytdYes
Realised P&Lrealized_pnl_functional_dayNo
GammagammaNo
VegavegaNo
ThetathetaNo
PV (Mtm)pv_functionalNoValue mirrors market_value_functional for aggregation
Pos Catposition_categoryNo
Bookbook_nameYes
Book IDbook_idNo
Entityentity_idNo
Entity Nameentity_nameNo
Accountaccount_idNo
Deskdesk_idNo
Strategystrategy_idNo
Reporting Entityreporting_entity_idNo
Functional CCYfunctional_ccyNo
Venueprimary_venueNo
Settle Posturesettlement_postureNo
RhorhoNo
Impl Volimplied_volNo
VolgavolgaNo
VannavannaNo
PV01pv01_functionalNo
DV01dv01_functionalNo
CS01cs01_functionalNo
Deltadelta_functionalYes
Cash Deltacash_deltaNo
Cash Gammacash_gammaNo
Cash Vegacash_vegaNo
Cash FX Deltacash_fx_deltaNo
Cash Rhocash_rhoNo
Cash Thetacash_thetaNo
CVAcva_functionalNo
DVAdva_functionalNo
FVAfva_functionalNo
Init Margininitial_margin_functionalNo
Var Marginvariation_margin_functionalNo
Collateral MVcollateral_market_value_functionalNo
Haircut %haircut_pctNo
Avg Buymean_buy_priceNo
Avg Sellmean_sell_priceNo
BoughtboughtNo
SoldsoldNo
Past Cashpast_cash_functionalNo
1W P&Lpnl_functional_1wNo
Cost Basiscost_basis_functionalNo
PnL Openpnl_functional_since_openNo
Extextensions_keysNoCount of keys on extensions object
Snapshot IDsnapshot_idNo
Sourcesource_systemNo
Valuation Modelvaluation_model_idNo
Snap Kindsnapshot_kindNo
Line Keyposition_line_keyNoStable row key / leaf discriminator
Underlierunderlier_instrument_idNo
Underlier Symunderlier_symbolNo
ASW (bps)asw_spread_bpsNo
Notional CCYnotional_currencyNo
Trade Datetrade_dateYes
Snapshot TSsnapshot_tsNo

When the column definition version (POSITIONS_GRID_COL_MODEL_VER) bumps, stored grid layouts below that version are reset so new defaults apply.


The dashboard toolbar (DashboardToolbar) provides:

  • Saved views (SavedViewsMenu, module dashboard): capture and restore AG Grid column state tied to the active grid tab API.
  • Add widget ▾: pick any sidebar widget not already shown (pnl, risk, orders, trades).
  • Widget chips: quick-remove widgets already pinned to the sidebar (× on each id).
  • Reset layout: restores default sidebar widgets (pnl, risk, orders), default split ratio, and clears user split overrides.

Grid-level preferences (decimals, row height, font, flash) live in the positions grid context menu—not on this toolbar.


Selecting a leaf row opens DetailDrawer on the right. Summary of tabs:

  • Valuation: Position quantities and averages, market value (bond clean/dirty when applicable), P&L ladder, bond analytics or option fields when detected, full Greeks + cash Greeks, valuation curve metadata (valuation_model_id, curves from extensions, staleness ms, flags), instrument identifiers.
  • Calendar: Option expiry, upcoming bond coupons (from pricing context / generated schedule), dividend rows—loads /atlas/instrument/pricing-context for the row’s instrument_id.
  • Corp actions: Corporate-actions style schedule when data exists.

If rendering throws, an inline error boundary shows the message with Close.


The sidebar Orders widget is implemented by TradeBlotterPanel (title Orders). It is not the legacy trade blotter: it loads working orders via useOrders() and renders them in AG Grid.

UI nameAPI fieldDefault visibleNotes
Instrumentinstrument_idYesPinned left
Order IDorder_idNo
Client OIDclient_order_idYes
SidesideYesHeader defaults to field label
Typeorder_typeYes
QtyqtyYesNumeric column
Filledfilled_qtyYes
Remainremaining_qtyYes
Limit Pxlimit_priceYes
Avg Pxavg_fill_priceYes
StatestateYes
Venuevenue_idYes
Entityentity_idYes
Accountaccount_idNo
Createdcreated_atYes
Updatedupdated_atNo

Row grouping is enabled on the orders grid (rowGroupPanelShow="always").

Use Add widget → Booked trades for fills from the Trades module (TradesWidget + TradesGrid). Amend and cancel workflows apply to booked trades, not to the Orders grid.


The P&L Summary sidebar widget (PnLSummaryPanel) calls /positions/summary and shows a compact KPI strip:

  • MV (func) — gross market value functional
  • Unrealisedunrealized_pnl_functional
  • Realised dayrealized_pnl_functional_day
  • P&L 1wpnl_functional_1w
  • P&L YTDpnl_functional_ytd
  • Lines — position line count when provided

Loading and error states render inline in the panel. Values reuse shared summary normalization helpers so scalar envelopes match backend shapes.


The Risk sidebar widget (RiskSidebarPanel) surfaces portfolio aggregates from the same /positions/summary envelope:

  • Rate risk: DV01, CS01, PV01 (displayed via basis-points formatting helper).
  • Greeks (func): Delta, Vega, Theta in functional currency units.

An embedded Exposure / 1d P&L section (ExposureChart) sits below the metrics.


ExposureChart aggregates live positionsStore rows:

  • Group by: family (instrument_family), kind (instrument_kind), or ccy (functional_ccy).
  • Metric: MV (market_value_functional) or 1d P&L (pnl_functional_1d falling back to unrealized_pnl_functional).

Bars sort by absolute magnitude; green/red indicates sign. A footer shows the bucket total.


TanStack Query hooks in positions.ts:

EndpointClient staleTimeBehavior
/positions/snapshot30sFeeds initial rows into positionsStore; banner on hard failure
/positions/summary15sPowers P&L + Risk widgets; keeps previous data visible while refetching

Live merges: websocket / store updates are folded into grid row data (mergePositionRowsForGrid) so cells can change between REST polls.

The Valuation column reads extensions.valuation_staleness_ms (number or numeric string). Labels are computed in valuationStatusLabel:

LabelCondition
N/AMissing or non-finite staleness
LIVEstaleness_ms < 3_000 (under 3 seconds)
WARN3_000 ≤ staleness_ms < 30_000 (under 30 seconds)
STALEstaleness_ms ≥ 30_000

The detail drawer Valuation Curve section also prints raw valuation_staleness_ms when present.