Story: Carry the rates family's fields across the ORE boundary
Table of Contents
This page documents a story in Sprint 28. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
Bring the rates family's ORE import and export into agreement with its tables, so that a trade the document states is the trade the store holds and the document gets back.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 28 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-18 |
3. Acceptance
- Each Critical and Important finding of the rates review, other than the one recorded as the component's, is closed by a unit that proves it, with the finding's evidence as the test's expected value.
- No column in the family is left without a producer or a consumer at the boundary, or the exception is recorded with its reason.
- A check fails when a model column has no producer or no consumer at the ORE boundary.
The story exists because of Investigation: Rates family data model review. Its findings are the units below, and each unit proves its own finding. The order is the three Criticals first, because they corrupt or block data, then the Important ones by the cheapest ratio to the most expensive — which is not the review's recommendation order, where the fact tables and the strike come before the carrier and the digits — and last the check that would have caught the family's whole class of defect.
| Unit | Findings | Effort |
|---|---|---|
| The forward rate agreement keeps its direction | 1 | Medium |
| The inflation swap can be stored | 2 | Small |
| A floor stays a floor | 3 | Medium |
| The two key-only fact tables reach a home | 4, 5 | Medium |
| The leg's direction is set for every product | 9 | Small |
| The boundary keeps the document's digits | 7 | Medium |
| The carrier states its product arrays once | 6 | Medium |
| A column without a producer fails the gate | recommendation 8 | Medium |
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Keep the forward rate agreement's direction | DONE | 2026-10-18 | 2026-10-18 | The ORE binding states LongShort and the mapper never reads it: import writes the literal Long and export writes longShort::Long, so a short forward rate agreement is stored and returned as a long. Read the document's direction on import, write it on export, and prove both with a test whose expected value is the document's own. |
| Store the inflation swap and return its index | DONE | 2026-10-18 | 2026-10-24 | An inflation swap cannot be stored: the import builds a default-constructed fact row and writes it, and the table refuses an empty index code. The document states the index, its base level and the observation lag on the CPI leg. Read them on import, write them on export, and prove the trade survives by its own values. |
| Keep a floor a floor and hold the whole collar | DONE | 2026-10-18 | 2026-10-24 | The document states a cap/floor's strikes as two lists, Caps and Floors, and a real corpus document states both. The shared strike child holds one row per trade with no column saying which list it came from, so the mapper keeps the first cap and the reverse writes everything back as a cap: a floor returns as a cap, and a collar loses its floor. Give the child a role and an ordinal, keyed like the leg rates beside it. |
5. Decisions
6. Out of scope
- The soft references and the doubled vocabularies (review findings 10 and 12), which are the component's recorded deferral and the FX review's finding 9.
- The flat scaffolding spine (finding 11), which is 25 of 146 trading models.
- The three stale statements and the stale diagram (finding 13), which are documentation and belong with the files they describe.
- The shared import handler's per-request writes (finding 8), which are the component's and are recorded as such.