Task: Seed an inflation curve the tenant holds

Table of Contents

This page documents a task in the Populate the ACME books with a realistic trade population — the remaining work story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

A provisioned tenant holds an inflation curve with an index a trade can name, and its fixings.

2. Status

Field Value
State DONE
Parent story Populate the ACME books with a realistic trade population — the remaining work
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-31

3. Acceptance

  • The tenant holds at least one inflation curve config with its curve definition and the conventions it needs.
  • A trade naming that index resolves it. The trade itself is the family's task; this one states the curve the trade names.
  • The seed is idempotent and arrives with the ACME profile, not by hand.

4. Plan

State the index, then the curve, in the document the tenant already reads.

The index is the one the refdata catalogue names for the book's currency: UKRPIX for GBP, USCPIA for USD and BECPIHL for EUR. It is stated once, in the seeder's configuration generator, and the curve definitions are derived from it, so a currency whose catalogue row changes index changes in one place.

The curve travels as a ZeroInflation curve definition inside the curve configuration artefact, which is the document the tenant's publish step already reads for its discount curves. Its conventions column states <INDEX>_INFLATIONSWAP, a row the tenant's 110 inflation swap conventions already carry, so the curve resolves through a convention that exists rather than through one the seed invents.

Two things the seed states negatively, because the store refuses a guess:

  • No extrapolation. The curve.flag value set arrives empty at publish time, so the guard refuses every value, and a curve that states none takes the engine's default.
  • No seasonality factors and no fixings. They are the family's own market data, and the story's rule is that a class whose market data is absent still books; the family's task says what it cannot prove yet. Recorded as the capture The seeded inflation curve states its index, its conventions and no fixings.

5. Measurements

Every number this task claims about a tree, with the command that produced it and the commit it was measured at. A number without both is not a measurement, because a clean-up record describes a tree and trunk moves under a branch: a consumer count, a gate's component count and a suite's size all change with no code changing, and the reader of a bare number cannot tell which tree it came from. Where the raw output matters, put it in an evidence/ file beside the task and name that file in the Command column.

What Value Command Commit
       

6. Notes

7. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) 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
     

8. PRs

PR Title
#4210 [refdata] Seed the inflation curve the family names

9. Review

Comment summary File Decision Notes
       

10. Result

The tenant holds ten zero coupon inflation curves, one per entity and currency whose index the refdata catalogue carries: UKRPIX for GBP, USCPIA for USD and BECPIHL for EUR, published as curve definitions inside the same curve configuration document as the discount curves, through the artefact the tenant already reads. Each names the inflation swap convention its index holds. A curve states no extrapolation, because the curve.flag value set arrives empty and the guard refuses every value; a curve that states none takes the engine's default rather than a guessed word.

Two defects blocked the run that measures them, and both are fixed on main by their own tasks: the planner's month arithmetic invented the 31st of September and the wire wrote it as the absent date, which is A generated date is a real date; and two bond products of one term claimed one issue, which is A security is named by its product. With both, the provisioning run completes.

Measured on a fresh tenant:

What Value Command
Inflation curve definitions the tenant holds 10, in the InflationCurves section select count(*) from ores_refdata_curve_definitions_tbl where section_code'InflationCurves'=
The indices they state UKRPIX three times, USCPIA four, BECPIHL three, across the four entities select d.curve_id, d.section_code, ic.inflation_type, ic.conventions from ores_refdata_inflation_curve_configs_tbl ic join ores_refdata_curve_definitions_tbl d on d.id = ic.curve_definition_id order by d.curve_id
What the conventions column holds UKRPIX_INFLATIONSWAP, USCPIA_INFLATIONSWAP, BECPIHL_INFLATIONSWAP, each a row the tenant's 110 inflation swap conventions carry the same query
The provisioning run completed, all nine steps, including generate_trades the provisioning script, run ba3100ec
The population the run wrote 178 trades select count(distinct id) from ores_trading_trades_tbl
Inflation swaps the population books 0 select count(*) from ores_trading_inflation_swap_instruments_tbl

The inflation family itself still books nothing: it has no planner, which is the task Populate the inflation family, and the curves are what that task needs. The curves state no fixings and no seasonality factors, so pricing an inflation swap has nothing to read yet; that is captured as The seeded inflation curve states its index, its conventions and no fixings rather than guessed at here.

Emacs 29.3 (Org mode 9.6.15)