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.

5. Decisions

6. Out of scope

Emacs 29.3 (Org mode 9.6.15)