Task: Add ir_index_convention table and ir_rate_formatter, wire into IR display sites
Table of Contents
This page documents a task in the Rate display conventions: convention-aware formatting across all Qt rate surfaces (FX + IR) story. It captures the goal, current status, acceptance, and any notes or results.
Goal
Give IR indices the same data-driven display-convention story FX has
via currency_pair_convention. Today IR has no convention entity to
resolve at all: floating_index_type is bare code+description,
overnight_index_convention holds fixing calendar/day-count/
settlement-lag but nothing about display precision. Every IR
rate-displaying surface hand-formats as a result:
CurveSnapshotMdiWindow (IR series), CurveShapePreviewChart,
SampleShortRatePathsChart, IrCurveEditor (Simple-mode label,
Advanced table), IrCurveGenerationConfigDetailDialog=/
=HistoryDialog.
- Add
ir_index_convention, keyed byfloating_index_type.code(mirroringcurrency_pair_convention's bitemporal shape/trigger pattern), carryingdecimal_placesonly — per the story Goal, real trading-system practice fixes an outright rate level's unit at percent always; bp is a different quantity (deltas/spreads/risk), not an alternate display mode for the same level, so no unit field is needed, only per-index precision (e.g. JPY TONAR's near-zero level plausibly wants more decimals than USD SOFR's). - Research real precision practice by currency/index tier (G10
overnight RFRs vs EM curves) to seed sensible
decimal_placesdefaults — write the findings into this doc's* Notesbefore picking values, not from assumption. - Add a sibling
ir_rate_formatter(ores.marketdata.client/ presentationorores.synthetic.api, whichever the index convention's own natural home turns out to be) matchingcrm_rate_formatter's architectural contract: stateless, presentation-layer, DB/NATS-free, takes an already-resolved convention. - Wire it into every surveyed IR surface above.
Status
| Field | Value |
|---|---|
| State | BACKLOG |
| Parent story | Rate display conventions: convention-aware formatting across all Qt rate surfaces (FX + IR) |
| Now | Not yet started. |
| Waiting on | Nothing. |
| Next | Begin implementation. |
| Last touched | 2026-07-22 |
Acceptance
- Research note (this doc's
* Notes) covering real per-currency/ index-tier decimal precision, citing concrete market practice. ir_index_conventiontable exists, keyed byfloating_index_type.code, bitemporal, trigger-validated, matchingcurrency_pair_convention's pattern; seeded with researcheddecimal_placesdefaults for the currencies/indices this codebase already generates synthetic curves for.ir_rate_formatterexists, matchingcrm_rate_formatter's architectural contract, with real Catch2 coverage independent of any Qt/NATS harness.CurveSnapshotMdiWindow(IR series),CurveShapePreviewChart,SampleShortRatePathsChart,IrCurveEditor,IrCurveGenerationConfigDetailDialog=/=HistoryDialogall resolve the relevant index's convention and format throughir_rate_formatter, replacing every hardcoded call site listed in the Goal.
Plan
(Implementation strategy. Written when work starts; key decisions
are distilled into the parent story's * Decisions at close, but the
plan itself stays — it is the historical record of what we did.)
Notes
Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario, run
through the QA Validation Runner panel) that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
PRs
| PR | Title |
|---|---|
Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|