Story: Complete the ORE report configuration
Table of Contents
This page documents a story in Product backlog — inbox, carried unfinished from Sprint 26 at close. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
This story delivers the remainder of the ORE report configuration entity model: the document kinds still to round trip — simulation, sensitivity, SIMM calibration, historical return and Basel traffic light — the report-kind classification that replaces the workflow-shaped columns, the packaging of a run's engine input through the owning services, and entity models for the hand-written tables.
This story was split from Model the ORE report configuration as entities when that story was reworded to its delivered scope and closed DONE at the sprint 26 close on 2026-10-05; its twenty-two tasks moved here.
2. Status
| Field | Value |
|---|---|
| State | BACKLOG |
| Parent sprint | Sprint 26 |
| Now | Not yet started. |
| Waiting on | Nothing. |
| Next | Take the remaining round trips and the report-kind classification when the story is picked up. |
| Last touched | 2026-10-05 |
3. Acceptance
- Simulation, sensitivity, SIMM calibration, historical return and Basel traffic light round trip end to end: entities, both mappers, and a round trip over every corpus file of the kind, or a fixture built from the schema where the corpus holds none.
- A report kind is a classification: the definition carries its kind by foreign key, and the kind selects the registered workflow and the parameter block a run of that kind reads.
- A run's engine input is packaged through the owning services' operations, whose handlers are code generated, and the store that wrote other components' tables is removed; the input travels through object storage rather than one inline message.
- An import writes a run's configuration in one transaction, and an export reproduces a run's configuration as of when the run started.
- The hand-written tables the census found carry entity models where a codegen shape covers them, and each component's SQL aggregate lists its generated entity files rather than holding them by hand.
- The values the entities flatten — the stress shift extras and the FX conventions' ORE ids — are held as typed rows and columns.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Model the analytics configuration libraries | BACKLOG | Entity models for the configuration the analytics in a run reference: simulation and cross-asset model, sensitivity, stress, SIMM calibration, historical return, Basel traffic light, and credit simulation. | ||
| Model the shared reference configuration | BACKLOG | The ORE configuration the reference and trading components own: conventions, calendars and adjustments, currencies, counterparties, netting set definitions and IBOR fallback, referenced by a run rather than copied into reporting. | ||
| Classify report kinds and bind each to a workflow | BACKLOG | Replace the workflow-shaped columns on the report definition with a classification that selects the registered workflow and the parameter block it reads. | ||
| Write the portfolio and market data files into the engine input | BACKLOG | The package carries trades and market data as msgpack files, but the run document names portfolio.xml, market.txt and fixings.txt; write those files so the engine can run the archive. | ||
| Store the stress test and credit simulation documents | BACKLOG | Stress test and credit simulation are modelled but have no store, so a run cannot import or export them; add them to the document store and the run store. | ||
| Export a run's configuration as of its run time | BACKLOG | An export reads the current version of every document, so a run cannot be reproduced once its configuration changes; read each document as it stood when the run started. | ||
| Import a run's configuration in one transaction | BACKLOG | An import writes through each repository in its own transaction, so a database error part way leaves what was written; make the import all or nothing. | ||
| Read each document's rows by its parent | BACKLOG | The document store reads every latest row of a table and filters in C++; read each child table by its parent's id instead. | ||
| Link today's market bindings to their collections | BACKLOG | A today's market binding names its collection by text, and nothing checks the name; decide whether the binding carries a foreign key to the collection or whether resolution by name at export is enough. | ||
| Round trip the sensitivity configuration | BACKLOG | sensitivity.xml end to end: the twenty-six shift families, the par conversion conventions and the shift grids, with both mappers and a round trip over every file in the corpus. | ||
| Round trip the simulation configuration | BACKLOG | simulation.xml end to end: the Monte Carlo settings, the cross-asset model, its calibrations and the correlation pairs, with both mappers and a round trip over every file in the corpus. | ||
| Round trip the SIMM calibration configuration | BACKLOG | simmcalibration.xml end to end: risk weights, correlations, concentration thresholds and currency lists per risk class, with both mappers and a round trip over every file in the corpus. | ||
| Round trip the historical return configuration | BACKLOG | historicalreturnconfig.xml end to end: the return convention per risk factor key and its displacement, with both mappers and a round trip. The corpus holds no file of this type, so the fixture is built from the schema. | ||
| Round trip the Basel traffic light configuration | BACKLOG | baselTrafficLightconfig.xml end to end: the MPOR observation buckets and the amber and red limits that classify them, with both mappers and a round trip. The corpus holds no file of this type, so the fixture is built from the schema. | ||
| Generate the entity part of each component's SQL aggregates | BACKLOG | Every component's create and drop aggregate lists its generated entity files by hand, so a new entity misses a recreate until someone adds two lines. The census showed creation order does not depend on soft foreign keys, so codegen can emit one fragment per component listing its entity tables and notify triggers, which the hand-written aggregate includes; hand-written files stay listed by hand. | ||
| Model the FpML coded-scheme tables so codegen owns them | BACKLOG | Fifteen refdata coded-scheme tables (account types, asset classes, business centres and the rest), their DQ artefact tables and their notify triggers say do not edit, but the legacy JSON models that generated them no longer exist, so nothing can regenerate them and they have been edited by hand since. Write entity models for them so codegen produces the same SQL. | ||
| Replace the stress shift extras with typed rows | BACKLOG | stress_test_shift keeps the elements its columns do not cover, including every shift type after the first and its key, in an extras column of semicolon and pipe encoded name and value pairs. The story rules out name and value pairs. Hold each element as a typed column or a child row, so every value the document carries is a queryable, checked column. | ||
| Keep each FX convention's ORE id | BACKLOG | FX conventions are stored one per currency pair and their ORE id is rebuilt from the pair as BASE-QUOTE-FX-CONVENTIONS on export, so ids such as EUR-USD-FX are lost and a pair cannot hold two conventions. Store each FX convention by its own id, so curve segments and today's market can refer to it. | ||
| Package the run input through the owners' operations | BACKLOG | The package step reads the run's documents through the owning services' operations instead of their tables, and ores.ore.core/store, which wrote other components' tables, is removed. | ||
| Generate the handlers of an operation model | BACKLOG | Codegen renders an operation model's protocol but not its handler or registrar, so every operation handler is hand-written; give operation models a handler and registrar facet driven by each operation's service call and permission. | ||
| Carry a run's input through object storage | BACKLOG | A run configuration import carries its files inline in one NATS message, whose server limit is 1 MB, so a large input such as the Products example cannot be imported; upload the input to object storage first, as the ORE trade import does. |