From fff37ea02afa9340051a9f014273f8dd2c35bec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 12:59:41 +0000 Subject: [PATCH 01/39] Pin the three OBR council tax nation rows to the UK and hold them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OBR's table 4.1 is UK-wide, so Chronicle stamps its England, Scotland and Wales council tax rows K02000001, and the substring rule's nation pins compiled no fact. The rows now pin to the UK, as obr.council_tax and obr.domestic_rates do; each binding still scopes the model column to its nation. obr.council_tax binds their sum, so measure exclusions hold the three as diagnostics, measured on every evaluation as evidence for CT-C (María's ruling of 2026-10-29, microcosm#1095 D14e). The references and membership regenerate with the PR's shared regeneration. Co-Authored-By: Claude Opus 5.5 --- ...ncil-tax-nation-rows-pin-and-hold.fixed.md | 1 + .../uk/calibration_measure_exclusions.json | 27 +++++++++++++++++++ .../build/uk/uk_population_targets.json | 6 ++--- tools/generate_uk_target_references.py | 7 +++++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md diff --git a/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md b/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md new file mode 100644 index 0000000000..9d63dcbdf7 --- /dev/null +++ b/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md @@ -0,0 +1 @@ +`obr.council_tax_england`, `obr.council_tax_scotland` and `obr.council_tax_wales` compile their facts: OBR's table 4.1 is UK-wide, so Chronicle stamps the three nation rows K02000001, and they now pin to the UK, as `obr.council_tax` and `obr.domestic_rates` do, instead of the nation codes the substring rule gave them, where no fact sits (microcosm#1095 D14e). Each binding still scopes the model column to its nation. `obr.council_tax` binds their sum, so measure exclusions hold the three rows as diagnostics, measured on every evaluation as evidence for the CT-C comparison (María's ruling of 2026-10-29). diff --git a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json index e2beddd177..86a93f61db 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json @@ -411,6 +411,33 @@ "approved_on": "2026-10-25", "expires_on": "2027-01-25" }, + { + "name": "obr.council_tax_england", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives England's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to England, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", + "approved_on": "2026-10-29", + "expires_on": "2027-01-29" + }, + { + "name": "obr.council_tax_scotland", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Scotland's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Scotland, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", + "approved_on": "2026-10-29", + "expires_on": "2027-01-29" + }, + { + "name": "obr.council_tax_wales", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Wales's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Wales, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", + "approved_on": "2026-10-29", + "expires_on": "2027-01-29" + }, { "name": "obr.fuel_duties_cars", "reason": "Scope and conversion residual once the stage sets household road fuel: OBR's cars receipts (GBP 14.4bn for FY2024-25, the April 2024 vehicle-type split) include car fuel paid by businesses, and ONS Consumer Trends 07.2.2 for CY2025 at DESNZ 2025 pump prices converts to about GBP 13.5bn of duty, 7 percent below the OBR cars line. With petrol plus diesel levelled to ONS 07.2.2 by the lcfs_consumption stage, the engine's 2025 fuel_duty reads -9.9 percent against the row on its RAC price divisors (-8.1 percent on DESNZ's; policyengine-uk#2169 A), so binding it would pull weight toward fuel buyers to cover business use the household frame does not hold. Before the level step it read -34.5 percent at design weights and -17.7 percent calibrated on microcosm#1121's head, where the weights raised petrol 21 and diesel 34 percent from design to final. On the 2026-09-30 national problem the calibration with the four consumption-tax rows bound left petrol 18 and diesel 36 percent above a re-solve with the four consumption-tax rows masked together, in which the other 1,086 rows fitted no worse. Household road fuel is bound as ons.household_road_fuel_expenditure. Measured on every evaluation with tools/diagnose_uk_consumption_taxes.py; rebind if Microcosm comes to model business use of cars, which microcosm#1278 tracks.", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index d6efad1eb9..838a1c10eb 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -2546,7 +2546,7 @@ "equals": "ENGLAND" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Bound at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to England. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_england", @@ -2589,7 +2589,7 @@ "equals": "SCOTLAND" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Bound at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Scotland. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_scotland", @@ -2632,7 +2632,7 @@ "equals": "WALES" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Bound at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Wales. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_wales", diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py index 996c8ea035..6b3af3107b 100644 --- a/tools/generate_uk_target_references.py +++ b/tools/generate_uk_target_references.py @@ -571,6 +571,13 @@ def _geography_composition( # domestic_rates is zero outside Northern Ireland, so the UK total is # Northern Ireland's (microcosm#1095). "obr.domestic_rates": "uk", + # Table 4.1's England, Scotland and Wales council tax rows are stamped + # K02000001 too; the substring rule pinned them to their nations, where + # no fact sits. Each binding scopes the model column to its nation, and + # the three rows are held as measured diagnostics (microcosm#1095 D14e). + "obr.council_tax_england": "uk", + "obr.council_tax_scotland": "uk", + "obr.council_tax_wales": "uk", # OBR table 4.9's DWP lines carry the geography DWP counts them over # (PolicyEngine/chronicle#357 item 4, from DWP's benefit expenditure and # caseload tables, Spring 2026): Great Britain for these eight, England and From 6f0d534026e9fa7a8904752d6d4124b2886d8242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:05:22 +0000 Subject: [PATCH 02/39] Let a selector's declared geography win over the inferred pin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 R8 and R9: a wrong geography pin reads as "no fact", and the generator's inference (one-by-one pins, prefix pins, then the substring rule) silently overrode any geography a target's selector declared, because the authoring merged the pin over the selector. María ruled on 2026-10-29 that a declared geography wins. The UK generator now returns a selector's declared geography_id first and refuses a one-by-one pin that disagrees with it, and the shared authoring refuses a pin that differs from a declared selector key instead of overwriting it. No committed selector declares a geography yet, so no reference changes; the devolved SLC rows are the first to use it. Co-Authored-By: Claude Opus 5.5 --- ...-uk-declared-selector-geography.changed.md | 1 + .../build/target_reference_authoring.py | 10 +++++++- .../shared/test_target_reference_authoring.py | 22 +++++++++++++++++ .../uk/test_uk_target_references.py | 24 +++++++++++++++++++ tools/generate_uk_target_references.py | 12 ++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 changelog.d/1095-uk-declared-selector-geography.changed.md diff --git a/changelog.d/1095-uk-declared-selector-geography.changed.md b/changelog.d/1095-uk-declared-selector-geography.changed.md new file mode 100644 index 0000000000..acab1c8038 --- /dev/null +++ b/changelog.d/1095-uk-declared-selector-geography.changed.md @@ -0,0 +1 @@ +A target's Chronicle selector can declare the geography its fact sits at, and the declaration wins over the generator's inferred pin: a wrong inference otherwise reads as "no fact" (microcosm#1095 R8, María's ruling of 2026-10-29). The authoring refuses a pin that disagrees with a declared geography, so the two cannot drift apart. diff --git a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py index 605cb42722..0f105c9f30 100644 --- a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py +++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py @@ -1108,7 +1108,15 @@ def _target_selector( config: TargetReferenceAuthoringConfig, ) -> dict[str, Any]: target_id = str(target["target_id"]) - selector = {**dict(target["ledger_selector"]), **dict(geography_pin)} + declared = dict(target["ledger_selector"]) + for key, value in dict(geography_pin).items(): + if key in declared and declared[key] != value: + raise ValueError( + f"target {target_id!r} declares {key}={declared[key]!r} in its " + f"selector, but its geography pin says {value!r}: a declared " + "geography wins, so the pin must follow it." + ) + selector = {**declared, **dict(geography_pin)} pins = config.selector_pins_by_target_id.get(target_id, {}) for key, value in pins.items(): if key == "dimension_values" and isinstance(value, Mapping): diff --git a/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py b/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py index e3ffa69627..8d36f26158 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py @@ -1266,3 +1266,25 @@ def test_a_declared_value_must_be_finite_and_non_negative() -> None: area_ids=("A",), declared_value=value, ) + + +def test_a_geography_pin_cannot_override_the_selector_s_declared_geography() -> None: + from types import SimpleNamespace + + from microcosm.build.target_reference_authoring import _target_selector + + config = SimpleNamespace(selector_pins_by_target_id={}) + target = { + "target_id": "x.total", + "ledger_selector": {"source_name": "x", "geography_id": "W92000004"}, + } + agreeing = {"geography_level": "country", "geography_id": "W92000004"} + assert _target_selector(target, agreeing, config) == { + "source_name": "x", + "geography_id": "W92000004", + "geography_level": "country", + } + with pytest.raises(ValueError, match="declared geography wins"): + _target_selector( + target, {"geography_level": "country", "geography_id": "K03000001"}, config + ) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 617526276a..2db999f788 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -64,6 +64,7 @@ TARGET_ID_GEOGRAPHY_PINS, _annual_uc_award_band_token, _fanout_name, + _geography_id_for_target, _geography_pins, _reference_metadata, _sum_target_ids, @@ -900,6 +901,29 @@ def test_uc_composition_targets_pin_paid_cells_and_explicit_month_windows() -> N ] +def test_a_geography_the_selector_declares_wins_over_the_inferred_pin() -> None: + """A wrong inferred pin reads as "no fact" (microcosm#1095 R8, R9).""" + + # The "slc." rule alone would pin Great Britain, where no devolved fact sits. + declared = { + "target_id": "slc.repayments.devolved_total", + "geography_levels": ["country"], + "ledger_selector": {"source_name": "slc", "geography_id": "W92000004"}, + } + assert _geography_id_for_target(declared) == "W92000004" + assert _geography_id_for_target({**declared, "ledger_selector": {}}) == ( + "K03000001" + ) + + # A one-by-one pin that disagrees with the selector is two declarations. + clash = { + "target_id": "obr.council_tax", + "ledger_selector": {"source_name": "obr", "geography_id": "E92000001"}, + } + with pytest.raises(ValueError, match="keep one declaration"): + _geography_id_for_target(clash) + + def test_prefix_geography_pins_carry_scotgov_and_england_scoped_slc_families() -> None: """Prefix pins carry the families the nation-substring rule cannot. diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py index 6b3af3107b..7bc04dd805 100644 --- a/tools/generate_uk_target_references.py +++ b/tools/generate_uk_target_references.py @@ -599,6 +599,18 @@ def _geography_composition( def _geography_id_for_target(target: Mapping[str, Any]) -> str: target_id = str(target["target_id"]).lower() + # A geography the selector declares wins over every inferred pin + # (microcosm#1095 R8): a wrong inference otherwise reads as "no fact". + declared = (target.get("ledger_selector") or {}).get("geography_id") + if declared is not None: + pinned = TARGET_ID_GEOGRAPHY_PINS.get(target_id) + if pinned is not None and UK_GEOGRAPHY_IDS[pinned] != str(declared): + raise ValueError( + f"{target_id}: its selector declares geography_id " + f"{declared!r}, but TARGET_ID_GEOGRAPHY_PINS pins " + f"{UK_GEOGRAPHY_IDS[pinned]!r}; keep one declaration." + ) + return str(declared) if target_id in TARGET_ID_GEOGRAPHY_PINS: return UK_GEOGRAPHY_IDS[TARGET_ID_GEOGRAPHY_PINS[target_id]] if target_id.startswith("dft."): From ae1edf70f890637c325102ee0cdb6f595ce57aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:10:41 +0000 Subject: [PATCH 03/39] Split SLC's devolved repayments into one row per nation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 R4. slc.repayments.devolved_total took one fact per devolved nation, but the "slc." rule pinned it to Great Britain, where no fact sits, so it never compiled. It becomes slc.repayments.wales_total, .scotland_total and .northern_ireland_total, each declaring its nation's geography in its selector (the R8 rule), measuring the frame's own year (measurement_period 2024) against SLC's 2024-25 outturn, and filtering the model to its nation. The incumbent registry's three per-nation metrics now map one to one. María ruled on 2026-10-29: bind Wales, and hold Scotland and Northern Ireland until their borrowers' plan thresholds are modelled (plan_4_imputation is False; policyengine-uk#2636 closed as not planned). Measure exclusions hold the two. The matched-period hold for the three rows waits for her signature, so the membership assertion in test_uk_target_references fails until the shared regeneration, which needs that hold. Co-Authored-By: Claude Opus 5.5 --- ...c-devolved-repayments-by-nation.changed.md | 1 + .../uk/calibration_measure_exclusions.json | 18 +++ .../uk/registry_parity_fixture_2025.json | 12 +- .../build/uk/uk_population_targets.json | 132 ++++++++++++++++-- .../uk/test_uk_target_references.py | 27 +++- 5 files changed, 166 insertions(+), 24 deletions(-) create mode 100644 changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md diff --git a/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md new file mode 100644 index 0000000000..4351f014b6 --- /dev/null +++ b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md @@ -0,0 +1 @@ +SLC's devolved student loan repayments are one row per nation, `slc.repayments.wales_total`, `slc.repayments.scotland_total` and `slc.repayments.northern_ireland_total`, each declaring its nation's geography in its selector, in place of one devolved row that compiled no fact at the Great Britain pin (microcosm#1095 R4). Each measures the frame's own year against SLC's 2024-25 outturn. Wales binds; Scotland and Northern Ireland are held as diagnostics until their borrowers' own plan thresholds are modelled (María's ruling of 2026-10-29). diff --git a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json index 86a93f61db..67e4a38892 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json @@ -464,6 +464,24 @@ "adjudication": "María's ruling of 2026-10-20 on the pre-Budget PR (microcosm#1278): hold the row out only if a national arm with it held out, run beside the calibration-period fix's arm (microcosm#1324), passes the gates and keeps the share of rows within 10 percent; otherwise keep it bound and label the distributional tables. The expiry, 2026-12-11, matches the uprating holds' renewal, after the Budget. Re-measured on 2026-10-24 on arm 2c of the policyengine-uk 2.151.0 bump: bound on table 7271 the row fails the weight-ratio gate. Her ruling of 2026-10-25 closed the basis question on table 7271 and kept the row held.", "approved_on": "2026-10-20", "expires_on": "2026-12-11" + }, + { + "name": "slc.repayments.scotland_total", + "reason": "Model basis, not a weight question: Scotland's borrowers repay on Scotland's own plan thresholds (Plan 4 in Scotland, Plan 1 in Northern Ireland), but this build does not impute those plans for them (plan_4_imputation is False, and policyengine-uk#2636, the plan relabel issue, closed as not planned), so the engine reads English thresholds. Binding the row would reweight borrowers to cover a threshold gap. Measured on every evaluation as a diagnostic; rebind once the plans are modelled.", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item R4): bind Wales's SLC repayments, and hold Scotland's and Northern Ireland's until their plan thresholds are modelled for their borrowers.", + "approved_on": "2026-10-29", + "expires_on": "2027-01-29" + }, + { + "name": "slc.repayments.northern_ireland_total", + "reason": "Model basis, not a weight question: Northern Ireland's borrowers repay on Northern Ireland's own plan thresholds (Plan 4 in Scotland, Plan 1 in Northern Ireland), but this build does not impute those plans for them (plan_4_imputation is False, and policyengine-uk#2636, the plan relabel issue, closed as not planned), so the engine reads English thresholds. Binding the row would reweight borrowers to cover a threshold gap. Measured on every evaluation as a diagnostic; rebind once the plans are modelled.", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item R4): bind Wales's SLC repayments, and hold Scotland's and Northern Ireland's until their plan thresholds are modelled for their borrowers.", + "approved_on": "2026-10-29", + "expires_on": "2027-01-29" } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json b/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json index 71ed268b7e..d4e3d7f2ae 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json +++ b/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json @@ -10268,11 +10268,11 @@ "value": 40869580.81 }, { - "contract_target_id": "slc.repayments.devolved_total", + "contract_target_id": "slc.repayments.scotland_total", "entity": "household", "family": "slc", "geographic_level": "country", - "measure": "slc.repayments.devolved_total", + "measure": "slc.repayments.scotland_total", "metadata": { "fixture": "incumbent_2025", "resolved_from_year": "2025" @@ -10284,11 +10284,11 @@ "value": 203300000.0 }, { - "contract_target_id": "slc.repayments.devolved_total", + "contract_target_id": "slc.repayments.wales_total", "entity": "household", "family": "slc", "geographic_level": "country", - "measure": "slc.repayments.devolved_total", + "measure": "slc.repayments.wales_total", "metadata": { "fixture": "incumbent_2025", "resolved_from_year": "2025" @@ -10300,11 +10300,11 @@ "value": 229100000.0 }, { - "contract_target_id": "slc.repayments.devolved_total", + "contract_target_id": "slc.repayments.northern_ireland_total", "entity": "household", "family": "slc", "geographic_level": "country", - "measure": "slc.repayments.devolved_total", + "measure": "slc.repayments.northern_ireland_total", "metadata": { "fixture": "incumbent_2025", "resolved_from_year": "2025" diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 838a1c10eb..a4f194424a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -542,9 +542,9 @@ "slc/student_loan_repayment/england/plan_1": "slc.repayments.england_plan_1", "slc/student_loan_repayment/england/plan_2": "slc.repayments.england_plan_2", "slc/student_loan_repayment/england/plan_5": "slc.repayments.england_plan_5", - "slc/student_loan_repayment/northern_ireland": "slc.repayments.devolved_total", - "slc/student_loan_repayment/scotland": "slc.repayments.devolved_total", - "slc/student_loan_repayment/wales": "slc.repayments.devolved_total", + "slc/student_loan_repayment/northern_ireland": "slc.repayments.northern_ireland_total", + "slc/student_loan_repayment/scotland": "slc.repayments.scotland_total", + "slc/student_loan_repayment/wales": "slc.repayments.wales_total", "sss/scottish_child_payment": "scotgov.scottish_child_payment_spending", "voa/council_tax/EAST_MIDLANDS/A": "mhclg.council_tax_stock.band_a", "voa/council_tax/EAST_MIDLANDS/B": "mhclg.council_tax_stock.band_b", @@ -1126,7 +1126,9 @@ "ons.land.land_value", "ons.land.household_land_value", "ons.land.corporate_land_value", - "slc.repayments.devolved_total", + "slc.repayments.wales_total", + "slc.repayments.scotland_total", + "slc.repayments.northern_ireland_total", "slc.repayments.england_total_higher_education", "slc.repayments.england_plan_1", "slc.repayments.england_plan_2", @@ -14893,7 +14895,7 @@ "selector_note": "Bound to ONS's preliminary end-2025 national balance sheet (published 10 June 2026), the latest official estimate for the calibration year, flagged preliminary; the final 2024 figures are the previous edition (microcosm#1123, PolicyEngine/chronicle#313)." }, { - "target_id": "slc.repayments.devolved_total", + "target_id": "slc.repayments.wales_total", "family": "slc_repayments", "geography_levels": [ "country" @@ -14901,18 +14903,31 @@ "measurement": { "entity": "person", "map_to": "household", - "concept": "uk.finance.student_loan_repayments.amount" + "concept": "uk.finance.student_loan_repayments.amount", + "filters": [ + { + "concept": "uk.geography.country", + "equals": "WALES" + } + ] }, "bindings": { "policyengine": { - "metric_name": "slc/student_loan_repayment/devolved", + "metric_name": "slc/student_loan_repayment/wales", "value_variable": "student_loan_repayment", "from_entity": "person", "map_to": "household", - "notes": "One fact per devolved country (Scotland, Wales, Northern Ireland); the resolved geography binds the model country filter (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3)." + "notes": "SLC's net student loan repayments for Wales, financial year 2024-25, the latest published; the selector declares Wales's geography (W92000004), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", + "measurement_period": 2024, + "filters": [ + { + "variable": "country", + "equals": "WALES" + } + ] }, "axiom": { - "metric_name": "slc/student_loan_repayment/devolved", + "metric_name": "slc/student_loan_repayment/wales", "status": "pending", "value_rule": "uk.finance.student_loan_repayments.amount" } @@ -14920,10 +14935,105 @@ "ledger_selector": { "source_name": "slc", "source_concept": "slc.student_loan_net_repayments_total", - "entity_name": "person" + "entity_name": "person", + "geography_id": "W92000004" + }, + "category_id": "slc.repayments", + "label": "Wales" + }, + { + "target_id": "slc.repayments.scotland_total", + "family": "slc_repayments", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.finance.student_loan_repayments.amount", + "filters": [ + { + "concept": "uk.geography.country", + "equals": "SCOTLAND" + } + ] + }, + "bindings": { + "policyengine": { + "metric_name": "slc/student_loan_repayment/scotland", + "value_variable": "student_loan_repayment", + "from_entity": "person", + "map_to": "household", + "notes": "SLC's net student loan repayments for Scotland, financial year 2024-25, the latest published; the selector declares Scotland's geography (S92000003), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", + "measurement_period": 2024, + "filters": [ + { + "variable": "country", + "equals": "SCOTLAND" + } + ] + }, + "axiom": { + "metric_name": "slc/student_loan_repayment/scotland", + "status": "pending", + "value_rule": "uk.finance.student_loan_repayments.amount" + } + }, + "ledger_selector": { + "source_name": "slc", + "source_concept": "slc.student_loan_net_repayments_total", + "entity_name": "person", + "geography_id": "S92000003" + }, + "category_id": "slc.repayments", + "label": "Scotland" + }, + { + "target_id": "slc.repayments.northern_ireland_total", + "family": "slc_repayments", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.finance.student_loan_repayments.amount", + "filters": [ + { + "concept": "uk.geography.country", + "equals": "NORTHERN_IRELAND" + } + ] + }, + "bindings": { + "policyengine": { + "metric_name": "slc/student_loan_repayment/northern_ireland", + "value_variable": "student_loan_repayment", + "from_entity": "person", + "map_to": "household", + "notes": "SLC's net student loan repayments for Northern Ireland, financial year 2024-25, the latest published; the selector declares Northern Ireland's geography (N92000002), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", + "measurement_period": 2024, + "filters": [ + { + "variable": "country", + "equals": "NORTHERN_IRELAND" + } + ] + }, + "axiom": { + "metric_name": "slc/student_loan_repayment/northern_ireland", + "status": "pending", + "value_rule": "uk.finance.student_loan_repayments.amount" + } + }, + "ledger_selector": { + "source_name": "slc", + "source_concept": "slc.student_loan_net_repayments_total", + "entity_name": "person", + "geography_id": "N92000002" }, "category_id": "slc.repayments", - "label": "Devolved total" + "label": "Northern Ireland" }, { "target_id": "slc.repayments.england_total_higher_education", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 2db999f788..26bcf92f85 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -901,6 +901,14 @@ def test_uc_composition_targets_pin_paid_cells_and_explicit_month_windows() -> N ] +#: SLC's devolved repayments, one row per nation (microcosm#1095 R4). +DEVOLVED_SLC_REPAYMENT_IDS = ( + "slc.repayments.wales_total", + "slc.repayments.scotland_total", + "slc.repayments.northern_ireland_total", +) + + def test_a_geography_the_selector_declares_wins_over_the_inferred_pin() -> None: """A wrong inferred pin reads as "no fact" (microcosm#1095 R8, R9).""" @@ -935,8 +943,8 @@ def test_prefix_geography_pins_carry_scotgov_and_england_scoped_slc_families() - England-scoped too — the borrower bindings filter country == ENGLAND explicitly and the support model variables are England-gated by construction — while the GB default pin could never match. - slc.repayments.devolved_total keeps the GB pin and stays held: activating - it needs per-nation repayment rows, not a pin change. The dwp.pip + SLC's devolved repayments are one row per nation, each declaring its + nation's geography in its selector (microcosm#1095 R4). The dwp.pip claimant counts are no targets now: they are England-and-Wales diagnostics on obr.pip, pinned K04000001 in their own declarations (microcosm#1095). """ @@ -976,7 +984,14 @@ def test_prefix_geography_pins_carry_scotgov_and_england_scoped_slc_families() - assert {pins[target_id]["geography_id"] for target_id in england_slc_ids} == { "E92000001" } - assert pins["slc.repayments.devolved_total"]["geography_id"] == "K03000001" + assert { + target_id: pins[target_id]["geography_id"] + for target_id in DEVOLVED_SLC_REPAYMENT_IDS + } == { + "slc.repayments.wales_total": "W92000004", + "slc.repayments.scotland_total": "S92000003", + "slc.repayments.northern_ireland_total": "N92000002", + } assert not [target_id for target_id in pins if target_id.startswith("dwp.pip.")] def haystack(target: dict) -> str: @@ -1021,10 +1036,8 @@ def haystack(target: dict) -> str: for target_id in sorted(england_slc_ids): assert membership["geography_pins"][target_id]["geography_id"] == "E92000001" assert membership["targets"][target_id]["status"] == "active" - assert ( - membership["targets"]["slc.repayments.devolved_total"]["status"] - == "no_fact_at_or_before_period" - ) + for target_id in DEVOLVED_SLC_REPAYMENT_IDS: + assert membership["targets"][target_id]["status"] == "active" assert not [ target_id for target_id in membership["targets"] From 71ca2536c14e7796402bc4750f3c2d90a4f88f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:15:40 +0000 Subject: [PATCH 04/39] Count SLC's three nation rows in the contract tests Follows the split of slc.repayments.devolved_total (microcosm#1095 R4): the contract has 453 targets, the registry scope 393, and the incumbent's three devolved metrics map one to one, so 185 mapped targets. geography_id joins the national selector vocabulary, as the R8 rule lets a selector declare its fact's geography. Co-Authored-By: Claude Opus 5.5 --- .../uk/test_uk_population_targets.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py index 91441eac1a..2521c5cca9 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py @@ -71,6 +71,9 @@ # microcosm#1301: the high-value homes region rows select the derived # stock's record set, as its local cells do. "record_set_spec_id", + # microcosm#1095 R8: a selector may declare its fact's geography, which + # wins over the inferred pin; the devolved SLC repayment rows do. + "geography_id", } LOCAL_SELECTOR_KEYS = { "source_name", @@ -255,8 +258,9 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: # of the objective; microcosm#1069 adds HMRC's Income Tax payers of State # Pension age and aged 65 and over by region and nation; microcosm#1418 # adds HMRC's Income Tax on savings at the basic, higher and additional - # rates, three national rows. - assert len(resource["targets"]) == 451 + # rates, three national rows; microcosm#1095 R4 splits SLC's devolved + # repayments into one row per nation, three rows for one. + assert len(resource["targets"]) == 453 providers = resource["hierarchy"]["providers"] categories = resource["hierarchy"]["categories"] @@ -270,10 +274,10 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: target_ids = [target["target_id"] for target in resource["targets"]] registry_scope = resource["registry_parity"]["scope_target_ids"] profile_scope = resource["profile_parity"]["scope_target_ids"] - assert len(registry_scope) == 391 + assert len(registry_scope) == 393 assert len(profile_scope) == 60 - assert target_ids[:391] == registry_scope - assert target_ids[391:] == profile_scope + assert target_ids[:393] == registry_scope + assert target_ids[393:] == profile_scope parity = resource["registry_parity"] assert parity["pinned_ref"] == "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3" @@ -299,8 +303,10 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: # Benefit family rows have no uk-data metric either. microcosm#1359's five # OBR excise rows have no uk-data metric (uk-data never measured excise # duty), nor microcosm#1069's two Income Tax payer by age rows, nor - # microcosm#1418's three Income Tax on savings rows. - assert len(mapped_target_ids) == 183 + # microcosm#1418's three Income Tax on savings rows. microcosm#1095 R4 + # maps the incumbent's three devolved SLC repayment metrics one to one, + # to three nation rows in place of one devolved row. + assert len(mapped_target_ids) == 185 assert len(unmapped_declarations) == 208 suppressed_ancestors = parity["suppressed_ancestors"] assert len(suppressed_ancestors) == 5 @@ -808,7 +814,7 @@ def test_uk_population_targets_have_unique_target_ids() -> None: resource = _load() target_ids = [target["target_id"] for target in resource["targets"]] - assert len(target_ids) == 451 + assert len(target_ids) == 453 assert len(target_ids) == len(set(target_ids)) @@ -1311,7 +1317,7 @@ def test_uc_payment_bands_share_administrative_family_but_keep_source_window() - def test_paid_joint_diagnostics_do_not_add_active_targets() -> None: targets = _load()["targets"] - assert len(targets) == 451 + assert len(targets) == 453 assert not any( f.get("variable") == "uc_calibration_child_entitlement" for target in targets From 7bbdbd89d88abba4c7109ecd0e73d649a1124324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:15:41 +0000 Subject: [PATCH 05/39] Measure the projected fiscal-year rows at the calendar-2025 window MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 R7: Scottish Child Payment spending, HMRC's Tax-Free Childcare top-up, Northern Ireland's Translink bus passenger receipts and SLC's four England repayment rows took their 2025-26 fact alone, outside María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year. She extended the rule to them on 2026-10-29, so each declares calendar_year_window: three twelfths of 2024-25 and nine of 2025-26. The pinned feed has both years for all seven (Scottish Child Payment has 2026-27 too). No hold or measurement period names them. Co-Authored-By: Claude Opus 5.5 --- ...-window-rule-for-projected-rows.changed.md | 1 + .../build/uk/uk_population_targets.json | 38 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 changelog.d/1095-uk-window-rule-for-projected-rows.changed.md diff --git a/changelog.d/1095-uk-window-rule-for-projected-rows.changed.md b/changelog.d/1095-uk-window-rule-for-projected-rows.changed.md new file mode 100644 index 0000000000..b5a2439a9a --- /dev/null +++ b/changelog.d/1095-uk-window-rule-for-projected-rows.changed.md @@ -0,0 +1 @@ +Scottish Child Payment spending, HMRC's Tax-Free Childcare top-up, Northern Ireland's Translink bus passenger receipts and SLC's England repayment rows are measured at the calendar-2025 window of their fiscal years, three twelfths of 2024-25 and nine twelfths of 2025-26, like every other fiscal-year fact (María's ruling of 2026-10-29, microcosm#1095 R7). They took the 2025-26 fact alone before. diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index a4f194424a..098f61017a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -14686,7 +14686,7 @@ "value_variable": "scottish_child_payment", "from_entity": "person", "map_to": "household", - "notes": "uk-data's 3%-per-year extrapolation beyond the budget horizon is a populace-side declaration; the facts are the published budget lines." + "notes": "uk-data's 3%-per-year extrapolation beyond the budget horizon is a populace-side declaration; the facts are the published budget lines. Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "sss/scottish_child_payment", @@ -14704,7 +14704,8 @@ "entity_name": "person" }, "category_id": "scotgov.social_security", - "label": "Scottish child payment spending" + "label": "Scottish child payment spending", + "value_operation": "calendar_year_window" }, { "target_id": "ons.savings_interest_income", @@ -15066,7 +15067,8 @@ ], "source_lines": [ "total_higher_education" - ] + ], + "notes": "Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "slc/student_loan_repayment/england", @@ -15083,7 +15085,8 @@ "entity_name": "person" }, "category_id": "slc.repayments", - "label": "England total higher education" + "label": "England total higher education", + "value_operation": "calendar_year_window" }, { "target_id": "slc.repayments.england_plan_1", @@ -15124,7 +15127,8 @@ ], "source_lines": [ "plan_1" - ] + ], + "notes": "Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "slc/student_loan_repayment/england/plan_1", @@ -15141,7 +15145,8 @@ "entity_name": "person" }, "category_id": "slc.repayments", - "label": "England plan 1" + "label": "England plan 1", + "value_operation": "calendar_year_window" }, { "target_id": "slc.repayments.england_plan_2", @@ -15184,7 +15189,7 @@ "plan_2_full_time", "plan_2_part_time" ], - "notes": "Publisher splits full-time/part-time (and masters/doctoral) products the model does not distinguish; the listed source lines sum to this target (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3)." + "notes": "Publisher splits full-time/part-time (and masters/doctoral) products the model does not distinguish; the listed source lines sum to this target (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "slc/student_loan_repayment/england/plan_2", @@ -15202,7 +15207,8 @@ "entity_name": "person" }, "category_id": "slc.repayments", - "label": "England plan 2" + "label": "England plan 2", + "value_operation": "calendar_year_window" }, { "target_id": "slc.repayments.england_plan_5", @@ -15245,7 +15251,7 @@ "plan_5_full_time", "plan_5_part_time" ], - "notes": "Publisher splits full-time/part-time (and masters/doctoral) products the model does not distinguish; the listed source lines sum to this target (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3)." + "notes": "Publisher splits full-time/part-time (and masters/doctoral) products the model does not distinguish; the listed source lines sum to this target (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "slc/student_loan_repayment/england/plan_5", @@ -15263,7 +15269,8 @@ "entity_name": "person" }, "category_id": "slc.repayments", - "label": "England plan 5" + "label": "England plan 5", + "value_operation": "calendar_year_window" }, { "target_id": "slc.borrowers.plan_2_above_threshold", @@ -15925,7 +15932,8 @@ "metric_name": "hmrc/tfc/government_top_up", "value_variable": "tax_free_childcare", "from_entity": "person", - "map_to": "household" + "map_to": "household", + "notes": "Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "hmrc/tfc/government_top_up", @@ -15940,7 +15948,8 @@ "period_type": "fiscal_year" }, "category_id": "hmrc.tax_free_childcare", - "label": "Government top up" + "label": "Government top up", + "value_operation": "calendar_year_window" }, { "target_id": "hmrc.tfc.children_with_used_accounts", @@ -17981,7 +17990,7 @@ "value": "NORTHERN_IRELAND" } ], - "notes": "DfI Public Transport Statistics, Translink bus passenger receipts, Ulsterbus plus Metro and Glider, fiscal year; the Northern Ireland leg of the local bus fare partition (#890)." + "notes": "DfI Public Transport Statistics, Translink bus passenger receipts, Ulsterbus plus Metro and Glider, fiscal year; the Northern Ireland leg of the local bus fare partition (#890). Measured at the calendar-2025 window of the publisher's fiscal years (three twelfths of 2024-25, nine twelfths of 2025-26; calendar_year_window): María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year, which she extended to this row on 2026-10-29 (microcosm#1095 R7)." }, "axiom": { "metric_name": "dfi_ni/bus_passenger_receipts", @@ -18002,7 +18011,8 @@ } }, "category_id": "dfi_ni.local_bus_finances", - "label": "Translink passenger receipts" + "label": "Translink passenger receipts", + "value_operation": "calendar_year_window" }, { "target_id": "nithc.public_transport_support", From 8e3394b15f14797c186d1dd8d5801bdd302f28ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:26:22 +0000 Subject: [PATCH 06/39] Let a Ledger reference select its facts at a declared observation period microcosm#1095 D5: a target is measured at the model's period, but some publications observe a period with another label. DfE's January census for model year Y is January Y + 1, the spring term of the year's entitlements, so the rows could only bind the census a year out: every selection path refused a fact after the target period. LedgerTargetReference gains observation_period. Fact eligibility, the latest-not-after choice, the exact-period match and the resolved-fact guard read it in place of the target period; the TargetSpec keeps the target period, and its metadata records ledger_observation_period. Operations that compose or pin periods themselves (the calendar-year windows and average, latest_plateau, the two ratio translations) and the monthly windows refuse it, as does an unparseable period. The authoring passes a target's observation_period into its reference rows and checks eligibility at it. Nothing declares one yet. Co-Authored-By: Claude Opus 5.5 --- .../1095-ledger-observation-period.added.md | 1 + .../src/microcosm/build/ledger_targets.py | 61 ++++++++++++++-- .../build/target_reference_authoring.py | 9 ++- .../engine_free/shared/test_ledger_targets.py | 73 +++++++++++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 changelog.d/1095-ledger-observation-period.added.md diff --git a/changelog.d/1095-ledger-observation-period.added.md b/changelog.d/1095-ledger-observation-period.added.md new file mode 100644 index 0000000000..aad16cc962 --- /dev/null +++ b/changelog.d/1095-ledger-observation-period.added.md @@ -0,0 +1 @@ +A Ledger target reference can declare an `observation_period`, the period its facts are selected at when that differs from the target period the model is measured at. Selection, the latest-period choice and the resolved-fact guard read it, the target keeps its own period, and the compiled metadata records it. Operations that compose periods of their own refuse it (microcosm#1095 D5). diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 3cb926ef3c..61986b1494 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -104,6 +104,18 @@ *MONTHLY_WINDOW_OPERATIONS, ) ) +#: Operations that compose or pin periods of their own, so a reference may +#: not move its fact selection with ``observation_period``. +PERIOD_COMPOSING_OPERATIONS = frozenset( + ( + "calendar_year_average", + "calendar_year_window", + "latest_plateau", + "scaled_by_ratio", + ROLLED_FORWARD_BY_RATIO, + CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO, + ) +) EXACT_PERIOD_VALUE_OPERATIONS = frozenset( ( "identity", @@ -249,6 +261,11 @@ class LedgerTargetReference: hierarchy: CalibrationHierarchySeed | None = None assertion_policy: str = "observed_only" period_match_policy: str = "latest_not_after" + #: The period the reference's facts are selected at, where it differs + #: from the target period the model is measured at: DfE's January census + #: for model year Y is January Y + 1, the spring term of the year's + #: entitlements (microcosm#1095 D5). ``None`` selects at the target period. + observation_period: int | str | None = None uprating_index: str | None = None uprating_from_period: int | str | None = None uprating_to_period: int | str | None = None @@ -327,6 +344,18 @@ def __post_init__(self) -> None: *MONTHLY_WINDOW_OPERATIONS, MONTHLY_WINDOW_COUNT_X_MEAN, } + if self.observation_period is not None: + if not _period_key_from_value(self.observation_period)[0]: + raise ValueError( + f"LedgerTargetReference {self.name!r}: observation_period " + f"{self.observation_period!r} is not a parseable period." + ) + if is_window or self.value_operation in PERIOD_COMPOSING_OPERATIONS: + raise ValueError( + f"LedgerTargetReference {self.name!r}: observation_period " + "selects facts at one period, but value_operation " + f"{self.value_operation!r} composes periods of its own." + ) if is_window != (self.period_match_policy == "source_window"): raise ValueError( "A monthly window operation requires the paired source_window period policy." @@ -1955,7 +1984,7 @@ def _resolve_reference_fact( raise ValueError( f"Ledger target reference {reference.name!r} did not match a " f"Ledger fact {period_requirement} " - f"{reference.period!r} for selector: " + f"{_selection_period(reference)!r} for selector: " f"{dict(reference.ledger_selector)!r}." ) identifiers = [ @@ -3728,11 +3757,26 @@ def _count_mean_fact_role(fact: object) -> str: return "" +def _selection_period(reference: LedgerTargetReference) -> int | str | None: + """The period a reference selects its facts at: its observation period if + it declares one, else its target period.""" + + if reference.observation_period is not None: + return reference.observation_period + return reference.period + + +def _selection_period_label(reference: LedgerTargetReference) -> str: + if reference.observation_period is not None: + return "observation period" + return "target period" + + def _eligible_selector_matches( reference: LedgerTargetReference, matches: list[object], ) -> list[object]: - target_period_key = _period_key_from_value(reference.period) + target_period_key = _period_key_from_value(_selection_period(reference)) if reference.period_match_policy == "source_window": return [ fact @@ -3820,18 +3864,19 @@ def _validate_reference_period(fact: object, reference: LedgerTargetReference) - return if reference.period_match_policy != "exact": if not _not_after_target_period( - _period_key(fact), _period_key_from_value(reference.period) + _period_key(fact), _period_key_from_value(_selection_period(reference)) ): raise ValueError( f"Ledger target reference {reference.name!r} requires a fact " - f"at or before target period {reference.period!r}, but resolved " + f"at or before {_selection_period_label(reference)} " + f"{_selection_period(reference)!r}, but resolved " f"fact period {_at(fact, 'period', 'value')!r}." ) return if not _exact_period_matches(fact, reference): raise ValueError( f"Ledger target reference {reference.name!r} requires exact period " - f"{reference.period!r}, but resolved fact period " + f"{_selection_period(reference)!r}, but resolved fact period " f"{_at(fact, 'period', 'type')!r}:" f"{_at(fact, 'period', 'value')!r}. A period mismatch must resolve " "through a Ledger source_projection at the target period, never " @@ -3855,7 +3900,7 @@ def _latest_period_selector_match( if len(semantic_keys) != 1: return None - target_period_key = _period_key_from_value(reference.period) + target_period_key = _period_key_from_value(_selection_period(reference)) best: tuple[int, int, str] | None = None best_matches: list[object] = [] for fact in matches: @@ -4041,7 +4086,7 @@ def _period_key(fact: object) -> tuple[int, int, str]: def _exact_period_matches(fact: object, reference: LedgerTargetReference) -> bool: """Match exact periods by semantic value while retaining period-kind pins.""" - expected_value = reference.period + expected_value = _selection_period(reference) actual_value = _comparable_period_value(fact) actual_type = _str_at(fact, "period", "type") selector_type = str(reference.ledger_selector.get("period_type", "")) @@ -4226,6 +4271,8 @@ def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]: metadata["ledger_value_operation"] = reference.value_operation metadata["ledger_assertion_policy"] = reference.assertion_policy metadata["ledger_period_match_policy"] = reference.period_match_policy + if reference.observation_period is not None: + metadata["ledger_observation_period"] = str(reference.observation_period) if reference.value_operation in MONTHLY_WINDOW_OPERATIONS: months = _declared_source_months(reference) metadata["ledger_source_months"] = json.dumps(months, separators=(",", ":")) diff --git a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py index 0f105c9f30..d4aa5f2aba 100644 --- a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py +++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py @@ -23,6 +23,7 @@ _not_after_target_period, _period_key, _period_key_from_value, + _selection_period, compile_ledger_target_references, reference_fact_selectors, ) @@ -1198,6 +1199,9 @@ def _area_reference_row( period_match_policy = target.get("period_match_policy") if period_match_policy is not None: row["period_match_policy"] = period_match_policy + observation_period = target.get("observation_period") + if observation_period is not None: + row["observation_period"] = observation_period uprating_index = target.get("uprating_index") if uprating_index is not None: row["uprating_index"] = str(uprating_index) @@ -1422,6 +1426,9 @@ def _reference_row( period_match_policy = target.get("period_match_policy") if period_match_policy is not None: row["period_match_policy"] = period_match_policy + observation_period = target.get("observation_period") + if observation_period is not None: + row["observation_period"] = observation_period uprating_index = target.get("uprating_index") if uprating_index is not None: row["uprating_index"] = str(uprating_index) @@ -1464,7 +1471,7 @@ def _compact_compile_error(status: str) -> str: def _eligible_fact(reference: LedgerTargetReference, fact: Mapping[str, Any]) -> bool: return _not_after_target_period( _period_key(fact), - _period_key_from_value(reference.period), + _period_key_from_value(_selection_period(reference)), ) and _assertion_allowed(reference, fact) diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index 59fe6e2246..b36b374154 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -1075,6 +1075,79 @@ def test__given_fiscal_year_facts_without_coverage__then_the_label_is_compared() assert "ledger_fact_period_label" not in spec.metadata +def _agi_reference(**overrides) -> LedgerTargetReference: + return LedgerTargetReference( + **{ + "name": "SOI AGI total", + "ledger_selector": { + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + "layout_groupby_value_id": "all", + }, + "entity": "tax_unit", + "measure": "adjusted_gross_income", + "period": 2023, + "family": "irs_soi", + **overrides, + } + ) + + +def test__given_an_observation_period__then_facts_are_selected_there() -> None: + """A declared observation period moves fact selection, not the target. + + DfE's January census for model year Y is January Y + 1 (microcosm#1095 + D5): the reference keeps its target period and selects its fact at the + period the measure observes, which may follow the target period. + """ + + rows = [ + _consumer_fact_row_for_period(2022, value=14_000_000_000_000), + _consumer_fact_row_for_period(2023, value=15_000_000_000_000), + _consumer_fact_row_for_period(2024, value=16_000_000_000_000), + _consumer_fact_row_for_period(2025, value=17_000_000_000_000), + ] + (plain,) = compile_ledger_target_references( + rows, [_agi_reference()], country="us" + ).specs + assert plain.value == 15_000_000_000_000 + assert "ledger_observation_period" not in plain.metadata + + (observed,) = compile_ledger_target_references( + rows, [_agi_reference(observation_period=2024)], country="us" + ).specs + assert observed.value == 16_000_000_000_000 + assert observed.period == 2023 + assert observed.metadata["ledger_observation_period"] == "2024" + + (exact,) = compile_ledger_target_references( + rows, + [_agi_reference(observation_period=2024, period_match_policy="exact")], + country="us", + ).specs + assert exact.value == 16_000_000_000_000 + + +@pytest.mark.parametrize( + ("overrides", "message"), + [ + ({"observation_period": "not a period"}, "not a parseable period"), + ( + {"observation_period": 2024, "value_operation": "calendar_year_window"}, + "composes periods of its own", + ), + ], +) +def test__given_an_observation_period_the_reference_cannot_honour__then_it_is_refused( + overrides, message +) -> None: + with pytest.raises(ValueError, match=message): + _agi_reference(**overrides) + + def test__given_exact_period_policy__then_only_the_target_period_is_used() -> None: registry = compile_ledger_target_references( [ From bca293ea10df93a436e6ad72a9e2ee4d56cbc01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:27:51 +0000 Subject: [PATCH 07/39] Bind DfE's January 2026 census at model year 2025 and retire its holds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 D5. The eight dfe.funded_childcare rows bound the January 2025 census, but model year 2025's entitlement year runs from April 2025 to March 2026: its spring term starts on 1 January 2026, and the spring-term measures count children by their age on 31 December 2025, the basis DfE's January 2026 census uses. The January 2025 census was a year out, held as an in-year snapshot. María ruled on 2026-10-29 to bind January 2026. Each row declares observation_period 2026-01, so its fact is selected there (the universal-only difference's two operands too) while the target stays at 2025. A fact after the target period carries no uprating hold, so the three in_year_snapshot holds retire. The reference and membership assertions wait for the shared regeneration; the childcare take-up refit follows on the arm's spine. Co-Authored-By: Claude Opus 5.5 --- ...1095-uk-dfe-january-2026-census.changed.md | 1 + .../build/uk/uk_population_targets.json | 40 ++++++++++------- .../microcosm/build/uk/uprating_holds.json | 44 ------------------- .../uk/test_uk_population_targets.py | 34 +++++++------- .../uk/test_uk_target_references.py | 19 ++++---- 5 files changed, 53 insertions(+), 85 deletions(-) create mode 100644 changelog.d/1095-uk-dfe-january-2026-census.changed.md diff --git a/changelog.d/1095-uk-dfe-january-2026-census.changed.md b/changelog.d/1095-uk-dfe-january-2026-census.changed.md new file mode 100644 index 0000000000..9773c9a2bf --- /dev/null +++ b/changelog.d/1095-uk-dfe-january-2026-census.changed.md @@ -0,0 +1 @@ +DfE's eight funded-childcare rows bind the January 2026 census, the spring term of model year 2025 and the month and age basis the spring-term measures use, in place of the January 2025 census a year out (María's ruling of 2026-10-29, microcosm#1095 D5). Each declares `observation_period` 2026-01; the fact follows the 2025 target period, so the three in-year snapshot holds retire. diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 098f61017a..1a32c7ab9d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -16048,7 +16048,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only: entitlement spending is not bound because caseload multiplied by full-usage ceilings would double count assumptions. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). A child already in reception by January is not funded then, so it is not counted; with the single ages 2 and 3 bound, this row fixes age 4." + "notes": "Caseload only: entitlement spending is not bound because caseload multiplied by full-usage ceilings would double count assumptions. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). A child already in reception by January is not funded then, so it is not counted; with the single ages 2 and 3 bound, this row fixes age 4. Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/working_parent_children_2_to_4", @@ -16072,7 +16072,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Working parent children 2 to 4" + "label": "Working parent children 2 to 4", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.early_learning_2_year_olds", @@ -16112,7 +16113,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only; the published 74.8% denominator is not transferred into the model take-up rate. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Funding starts the term after the second birthday, so every child of DfE age 2 in a qualifying family that claims is counted, where policyengine-uk still reads the age on 6 October." + "notes": "Caseload only; the published 74.8% denominator is not transferred into the model take-up rate. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Funding starts the term after the second birthday, so every child of DfE age 2 in a qualifying family that claims is counted, where policyengine-uk still reads the age on 6 October. Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/early_learning_2_year_olds", @@ -16132,7 +16133,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Early learning 2 year olds" + "label": "Early learning 2 year olds", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.universal_only_children", @@ -16201,7 +16203,7 @@ "equals": "ENGLAND" } ], - "notes": "Universal-only caseload is the declared difference between the overlapping published universes; no entitlement spending row is bound. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Nursery registrations at DfE ages 3 and 4 less working parent registrations at those ages: a working parent child keeps the universal hours (Childcare Act 2016 s.1(6)(a); policyengine-uk 2.128.1), so every working parent child of those ages is a universal child too. Universal hours start the term after the third birthday, so every child of DfE age 3 is counted, where policyengine-uk still reads the age on 6 October. With the nursery age 3 row bound, this row fixes the nursery age 4 cell." + "notes": "Universal-only caseload is the declared difference between the overlapping published universes; no entitlement spending row is bound. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Nursery registrations at DfE ages 3 and 4 less working parent registrations at those ages: a working parent child keeps the universal hours (Childcare Act 2016 s.1(6)(a); policyengine-uk 2.128.1), so every working parent child of those ages is a universal child too. Universal hours start the term after the third birthday, so every child of DfE age 3 is counted, where policyengine-uk still reads the age on 6 October. With the nursery age 3 row bound, this row fixes the nursery age 4 cell. Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/universal_only_children", @@ -16214,7 +16216,8 @@ "entity_name": "person" }, "category_id": "dfe.funded_childcare", - "label": "Universal only children" + "label": "Universal only children", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.working_parent_children_9_to_11_months", @@ -16274,7 +16277,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only: working parent registrations at 9 to 11 months in the January census, the 15 hours for children from 9 months from September 2024. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). From policyengine-uk 2.147.2 a child is funded from the term after it reaches 9 months (SI 2022/1134 reg 27), so a child of DfE age 0 born from January to March is funded in the spring term." + "notes": "Caseload only: working parent registrations at 9 to 11 months in the January census, the 15 hours for children from 9 months from September 2024. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). From policyengine-uk 2.147.2 a child is funded from the term after it reaches 9 months (SI 2022/1134 reg 27), so a child of DfE age 0 born from January to March is funded in the spring term. Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/working_parent_children_9_to_11_months", @@ -16295,7 +16298,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Working parent children 9 to 11 months" + "label": "Working parent children 9 to 11 months", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.working_parent_children_age_1", @@ -16355,7 +16359,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only, by single year of age: working parent registrations at age 1 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages)." + "notes": "Caseload only, by single year of age: working parent registrations at age 1 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/working_parent_children_age_1", @@ -16376,7 +16380,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Working parent children age 1" + "label": "Working parent children age 1", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.working_parent_children_age_2", @@ -16436,7 +16441,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only, by single year of age: working parent registrations at age 2 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages)." + "notes": "Caseload only, by single year of age: working parent registrations at age 2 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/working_parent_children_age_2", @@ -16457,7 +16462,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Working parent children age 2" + "label": "Working parent children age 2", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.working_parent_children_age_3", @@ -16517,7 +16523,7 @@ "equals": "ENGLAND" } ], - "notes": "Caseload only, by single year of age: working parent registrations at age 3 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages)." + "notes": "Caseload only, by single year of age: working parent registrations at age 3 in the January census. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/working_parent_children_age_3", @@ -16538,7 +16544,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Working parent children age 3" + "label": "Working parent children age 3", + "observation_period": "2026-01" }, { "target_id": "dfe.funded_childcare.universal_nursery_children_age_3", @@ -16598,7 +16605,7 @@ "equals": "ENGLAND" } ], - "notes": "Universal hours registrations at age 3 outside reception (DfE's nursery provision), counting working parent children too, as DfE's universal counts do. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Universal hours start the term after the third birthday, so every child of DfE age 3 is counted, where policyengine-uk still reads the age on 6 October." + "notes": "Universal hours registrations at age 3 outside reception (DfE's nursery provision), counting working parent children too, as DfE's universal counts do. Counted at the spring term, as DfE's January census counts: a child registered in the term that starts on 1 January of the model year's April-to-March span, by its age on 31 December (uk_runtime/dfe_spring_term.py; accounting note dfe_funded_childcare_single_ages). Universal hours start the term after the third birthday, so every child of DfE age 3 is counted, where policyengine-uk still reads the age on 6 October. Selected at DfE's January 2026 census (observation_period 2026-01): model year 2025's entitlement year runs from April 2025 to March 2026, so its spring term starts on 1 January 2026, and the census counts children by their age on 31 December 2025, the measure's own month and age basis. The January 2025 census, bound before, was a year out (María's ruling of 2026-10-29, microcosm#1095 D5)." }, "axiom": { "metric_name": "dfe/funded_childcare/universal_nursery_children_age_3", @@ -16619,7 +16626,8 @@ } }, "category_id": "dfe.funded_childcare", - "label": "Universal nursery children age 3" + "label": "Universal nursery children age 3", + "observation_period": "2026-01" }, { "target_id": "dft.bus_fare_receipts.england", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json index 9e970e152c..7843b06859 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json @@ -2,50 +2,6 @@ "schema_version": 1, "description": "Declared reasons for UK targets bound at the 2025 calibration period from an older fact without an uprating index (microcosm#1123). Kinds: matched_period, in_year_snapshot, control_rescaled, reviewed_no_index. uk_runtime.uprating_holds refuses an undeclared, expired or stale hold at compile time. A hold is in force only once it carries approved_by and approved_on and its status is approved: the compile refuses the rows of any other entry. Every entry expires two months after its signature, so each is reviewed again by 2026-12-11.", "holds": [ - { - "scope": "national", - "kind": "in_year_snapshot", - "target_ids": [ - "dfe.funded_childcare.early_learning_2_year_olds", - "dfe.funded_childcare.universal_only_children", - "dfe.funded_childcare.working_parent_children_2_to_4" - ], - "reason": "DfE funded early-education take-up counted in the January 2025 census: a count at a date inside the calibration year, not a lagged period.", - "tracking": "microcosm#1278", - "approved_by": "juaristi22", - "approved_on": "2026-10-11", - "status": "approved", - "expires_on": "2026-12-11" - }, - { - "scope": "national", - "kind": "in_year_snapshot", - "target_ids": [ - "dfe.funded_childcare.universal_nursery_children_age_3", - "dfe.funded_childcare.working_parent_children_age_1", - "dfe.funded_childcare.working_parent_children_age_2", - "dfe.funded_childcare.working_parent_children_age_3" - ], - "reason": "DfE funded early-education registrations by single year of age and provision counted in the January 2025 census: a count at a date inside the calibration year, not a lagged period. Requested by María on 2026-10-21 with the single-age rows.", - "tracking": "microcosm#1278", - "approved_by": "juaristi22", - "approved_on": "2026-10-21", - "status": "approved", - "expires_on": "2026-12-11" - }, - { - "scope": "national", - "kind": "in_year_snapshot", - "target_ids": [ - "dfe.funded_childcare.working_parent_children_9_to_11_months" - ], - "reason": "DfE funded early-education working parent registrations at 9 to 11 months counted in the January 2025 census: a count at a date inside the calibration year, not a lagged period. Requested by María on 2026-10-22 with the row, which the spring-term measures and its own under-2 take-up let the model carry (microcosm#1338).", - "tracking": "microcosm#1278", - "approved_by": "juaristi22", - "approved_on": "2026-10-22", - "status": "approved", - "expires_on": "2026-12-11" - }, { "scope": "national", "kind": "in_year_snapshot", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py index 2521c5cca9..e7d212149a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py @@ -21,7 +21,6 @@ ) from microcosm.build.uk_runtime.uprating_holds import ( load_uk_uprating_holds, - uk_hold_is_signed, ) FORBIDDEN_VALUE_KEYS = {"aggregation", "operation", "registry", "target_value", "value"} @@ -790,24 +789,29 @@ def test_dfe_rows_read_the_spring_term_measures_only() -> None: assert not names & {"age", "current_education"}, target["target_id"] -def test_dfe_single_age_rows_hold_the_january_2025_census() -> None: - """The rows read the January 2025 census, signed in-year snapshots.""" +def test_dfe_rows_read_the_january_2026_census_without_a_hold() -> None: + """Model year 2025's spring term is the January 2026 census (D5). - holds = load_uk_uprating_holds()["holds"] - entries = [ - entry for entry in holds if set(DFE_SINGLE_AGE_IDS) & set(entry["target_ids"]) + Every DfE row selects its fact at January 2026, a period after the 2025 + target period, so none is held (María's ruling of 2026-10-29, + microcosm#1095 D5); the January 2025 census, held as an in-year snapshot + before, was a year out. + """ + + dfe = [ + target + for target in _load()["targets"] + if target["target_id"].startswith("dfe.funded_childcare.") ] - assert sorted( - target_id for entry in entries for target_id in entry["target_ids"] - ) == sorted(DFE_SINGLE_AGE_IDS) + assert len(dfe) == 8 + assert {target["observation_period"] for target in dfe} == {"2026-01"} + assert set(DFE_SINGLE_AGE_IDS) <= {target["target_id"] for target in dfe} + holds = load_uk_uprating_holds()["holds"] assert not any( - set(DFE_SIGNED_OUT_AGE_4_IDS) & set(hold["target_ids"]) for hold in holds + target_id.startswith("dfe.") + for entry in holds + for target_id in entry["target_ids"] ) - for entry in entries: - assert entry["scope"] == "national" - assert entry["kind"] == "in_year_snapshot" - assert uk_hold_is_signed(entry) - assert {entry["approved_on"] for entry in entries} == {"2026-10-21", "2026-10-22"} def test_uk_population_targets_have_unique_target_ids() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 26bcf92f85..624f2893a7 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -780,15 +780,14 @@ def test_ons_single_year_age_references_pin_the_uk_and_england() -> None: ) -def test_dfe_single_age_references_pin_england_at_the_january_2025_census() -> None: +def test_dfe_single_age_references_pin_england_at_the_january_2026_census() -> None: """The five DfE single-age rows resolve one England fact each. - The ``dfe.`` prefix pins every DfE row to England (E92000001); each new - row selects one age cell of its census table, January 2025, held to the - 2025 calibration year (María's rulings, 2026-10-21 and 2026-10-22, the - 9 to 11 months row with its own hold). The age-4 cells are signed out, as - the bound rows fix them, so they have no reference and no membership - entry. + The ``dfe.`` prefix pins every DfE row to England (E92000001); each row + selects one age cell of its census table at January 2026, its declared + observation period, the spring term of model year 2025, so no uprating + hold applies (microcosm#1095 D5). The age-4 cells are signed out, as the + bound rows fix them, so they have no reference and no membership entry. """ references = { @@ -806,12 +805,12 @@ def test_dfe_single_age_references_pin_england_at_the_january_2025_census() -> N assert reference["family"] == "dfe_funded_childcare" assert reference["entity"] == "person" assert reference["period"] == 2025 - assert reference["uprating_from_period"] == "2025-01" - assert reference["uprating_to_period"] == 2025 + assert reference["observation_period"] == "2026-01" + assert "uprating_from_period" not in reference assert reference["metadata"]["observation_basis"] == "january_stock" assert membership["targets"][target_id]["status"] == "active" (candidate,) = membership["targets"][target_id]["candidates"] - assert candidate["resolved_fact_period"] == "2025-01" + assert candidate["resolved_fact_period"] == "2026-01" for target_id in DFE_SIGNED_OUT_AGE_4_IDS: assert target_id not in references assert target_id not in membership["targets"] From c41fc154b3a7299d88e425ff85ab578f123a287c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:32:10 +0000 Subject: [PATCH 08/39] Let a window ratio's numerator be the rest of its universe microcosm#1095 D14f needs OBR's council tax receipts restated for the main residences households hold: England's chargeable dwellings less its second homes and empty dwellings, over the chargeable dwellings. No published cell is that remainder, and a window-ratio operand can only sum cells. A calendar_year_window_scaled_by_ratio numerator may now declare complement: true. Its cells are taken off the denominator before the quotient, which keeps the (0, 1] subset-share check. complement is operand metadata, never a selector field; only a numerator may declare it, and only as true. The spec records ledger_value_numerator_rule, and the formula reads "(denominator - numerator) / denominator". Co-Authored-By: Claude Opus 5.5 --- ...95-ledger-window-ratio-complement.added.md | 1 + .../src/microcosm/build/ledger_targets.py | 34 +++++++- .../engine_free/shared/test_ledger_targets.py | 78 +++++++++++++++++++ 3 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 changelog.d/1095-ledger-window-ratio-complement.added.md diff --git a/changelog.d/1095-ledger-window-ratio-complement.added.md b/changelog.d/1095-ledger-window-ratio-complement.added.md new file mode 100644 index 0000000000..242713c56d --- /dev/null +++ b/changelog.d/1095-ledger-window-ratio-complement.added.md @@ -0,0 +1 @@ +A `calendar_year_window_scaled_by_ratio` numerator can declare `complement`: its cells come off the denominator, so the share is the rest of the published universe, for example chargeable dwellings less second homes and empty dwellings (microcosm#1095 D14f). The compiled metadata records the rule and the formula. diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 61986b1494..ff3557ec52 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -932,9 +932,16 @@ def target_spec_from_ledger_reference( ) numerator = math.fsum(numeric_values[cut : cut + numerators]) denominator = math.fsum(numeric_values[cut + numerators :]) + complement = _window_ratio_numerator_is_complement(reference) + if complement: + numerator = denominator - numerator numeric_value, ratio_metadata = _scaled_by_ratio_value( reference, [base, numerator, denominator] ) + if complement: + ratio_metadata["ledger_value_numerator_rule"] = ( + "denominator less the numerator cells" + ) value_metadata = { **_calendar_year_window_metadata(reference, window), **ratio_metadata, @@ -3291,6 +3298,14 @@ def _validate_calendar_year_window_scaled_by_ratio_reference( "cell(s), so it names them in exactly one list-valued selector " f"field of {count} distinct member(s), got {members!r}." ) + for operand in reference.value_operands[1:]: + if "complement" in operand and ( + operand.get("role") != "numerator" or operand["complement"] is not True + ): + raise ValueError( + f"{prefix}: only the numerator may declare complement, and only " + "as true." + ) if SOURCE_MEASURE_ID_BY_OPENING_YEAR in reference.ledger_selector: raise ValueError( f"{prefix} reads one series; {SOURCE_MEASURE_ID_BY_OPENING_YEAR!r} is " @@ -3307,9 +3322,12 @@ def _validate_calendar_year_window_scaled_by_ratio_reference( raise ValueError(f"{prefix} requires an explicit calendar-year target period.") -#: Keys of a window-ratio operand that are not selector fields. +#: Keys of a window-ratio operand that are not selector fields. A numerator +#: may declare ``complement``: its cells are taken off the denominator, so +#: the share is the rest of the published universe (England's chargeable +#: dwellings less second homes and empty dwellings, microcosm#1095 D14f). _WINDOW_RATIO_OPERAND_METADATA_KEYS = frozenset( - ("role", "expected_member_count", "label") + ("role", "expected_member_count", "label", "complement") ) @@ -3340,6 +3358,12 @@ def _window_ratio_operand_selectors( ) +def _window_ratio_numerator_is_complement(reference: LedgerTargetReference) -> bool: + """Whether the numerator's cells are taken off the denominator.""" + + return reference.value_operands[1].get("complement") is True + + def _window_ratio_operand_counts(reference: LedgerTargetReference) -> tuple[int, int]: """How many facts the numerator and the denominator each sum.""" @@ -4291,7 +4315,11 @@ def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]: target_year = _calendar_year_from_reference(reference) metadata["ledger_value_formula"] = ( f"(3/12 * FY{target_year - 1} + 9/12 * FY{target_year}) " - "* numerator / denominator" + + ( + "* (denominator - numerator) / denominator" + if _window_ratio_numerator_is_complement(reference) + else "* numerator / denominator" + ) ) if reference.value_operation == "linear_combination": metadata["ledger_value_formula"] = _linear_combination_formula(reference) diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index b36b374154..7a6b6c9e74 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -5576,6 +5576,84 @@ def test__given_a_window_and_a_pinned_quotient__then_the_window_is_translated() assert metadata["ledger_aggregate_fact_key"] == "ledger.aggregate_fact.v2:fy2025" +def test__given_a_complement_numerator__then_its_cells_come_off_the_universe() -> None: + """The share is the rest of the published universe (microcosm#1095 D14f). + + England's chargeable dwellings less its second homes and empty dwellings + restate OBR's council tax receipts for the main residences households + hold. + """ + + numerator, denominator = _window_ratio_reference().value_operands[1:] + reference = _window_ratio_reference( + value_operands=( + {"role": "base"}, + {**numerator, "complement": True}, + denominator, + ) + ) + registry = compile_ledger_target_references( + _window_ratio_facts(numerator=20.0), [reference], country="uk" + ) + + spec = registry.specs[0] + window = 0.25 * 304.0 + 0.75 * 329.0 + assert spec.value == pytest.approx(window * 60.0 / 80.0) + assert spec.metadata["ledger_value_numerator"] == repr(60.0) + assert spec.metadata["ledger_value_numerator_rule"] == ( + "denominator less the numerator cells" + ) + assert spec.metadata["ledger_value_formula"] == ( + "(3/12 * FY2024 + 9/12 * FY2025) * (denominator - numerator) / denominator" + ) + # The flag is metadata, never a selector field. + assert "complement" not in reference_fact_selectors(reference)[1] + + +@pytest.mark.parametrize( + "operands", + [ + ( + {"role": "base"}, + { + "role": "numerator", + "source_measure_id": "x", + "period_type": "tax_year", + "period_value": 2024, + }, + { + "role": "denominator", + "source_measure_id": "y", + "period_type": "tax_year", + "period_value": 2024, + "complement": True, + }, + ), + ( + {"role": "base"}, + { + "role": "numerator", + "source_measure_id": "x", + "period_type": "tax_year", + "period_value": 2024, + "complement": False, + }, + { + "role": "denominator", + "source_measure_id": "y", + "period_type": "tax_year", + "period_value": 2024, + }, + ), + ], +) +def test__given_a_complement_anywhere_but_a_true_numerator__then_it_refuses( + operands, +) -> None: + with pytest.raises(ValueError, match="only the numerator may declare complement"): + _window_ratio_reference(value_operands=operands) + + def test__given_a_window_ratio__then_operand_selectors_are_complete_as_declared() -> ( None ): From 05467912cce82640fcc30ec9026bccc690a255d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:34:08 +0000 Subject: [PATCH 09/39] Bind the main-residence share of OBR's council tax receipts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 D14f. obr.council_tax bound OBR's Great Britain receipts, which include council tax on second homes and empty dwellings. Households do pay it on property they own, but the frame's council_tax is each household's main-residence bill only and the engine has no input for council tax on other property, so the solve met the whole line by pushing main-residence bills up. María ruled on 2026-10-29 to bind the main-residence share. The row now scales its calendar-2025 window by England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings (MHCLG Council Taxbase, October 2025), through the window ratio's new complement numerator. A private compile of the row against the pinned feed resolves the window and the three taxbase cells once each. The count-based share and England standing for Scotland and Wales are stated in the notes. Co-Authored-By: Claude Opus 5.5 --- ...ouncil-tax-main-residence-share.changed.md | 1 + .../build/uk/uk_population_targets.json | 34 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 changelog.d/1095-uk-council-tax-main-residence-share.changed.md diff --git a/changelog.d/1095-uk-council-tax-main-residence-share.changed.md b/changelog.d/1095-uk-council-tax-main-residence-share.changed.md new file mode 100644 index 0000000000..9ef442a3a0 --- /dev/null +++ b/changelog.d/1095-uk-council-tax-main-residence-share.changed.md @@ -0,0 +1 @@ +`obr.council_tax` binds the main-residence share of OBR's council tax receipts: the calendar-2025 window is scaled by England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings (MHCLG Council Taxbase, October 2025). The frame carries only main-residence bills, so binding the whole line pushed them up (María's ruling of 2026-10-29, microcosm#1095 D14f). diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 1a32c7ab9d..1eabd10a47 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -2505,7 +2505,7 @@ "map_to": "household" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). It binds row 15 ('Total council tax receipts'), the sum of the England, Scotland and Wales rows, over Great Britain's households (microcosm#1095). Row 19 ('Total net council tax receipts', obr.council_tax_total, bound before) adds Northern Ireland domestic rates, the council tax accruals adjustment and the high-value council tax surcharge: GBP 1.34bn, 2.7% of the calendar-2025 window, which no household's council tax carries (domestic rates are obr.domestic_rates, held). Chronicle stamps the row K02000001, as OBR's table is UK-wide, and the selector pins it there. Bound at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). It binds row 15 ('Total council tax receipts'), the sum of the England, Scotland and Wales rows, over Great Britain's households (microcosm#1095). Row 19 ('Total net council tax receipts', obr.council_tax_total, bound before) adds Northern Ireland domestic rates, the council tax accruals adjustment and the high-value council tax surcharge: GBP 1.34bn, 2.7% of the calendar-2025 window, which no household's council tax carries (domestic rates are obr.domestic_rates, held). Chronicle stamps the row K02000001, as OBR's table is UK-wide, and the selector pins it there. Bound at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane). Restated for main residences (María's ruling of 2026-10-29, microcosm#1095 D14f): OBR's receipts include council tax on second homes and empty dwellings, which households do pay on property they own, but the frame's council_tax is each household's main-residence bill only, and the engine has no input for council tax on other property, so binding the whole line pushed main-residence bills up. The window is scaled by England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings (MHCLG Council Taxbase, October 2025; calendar_year_window_scaled_by_ratio with a complement numerator). Two approximations are stated, not corrected: the share counts dwellings, so premiums on second homes and long-term empty homes make the true tax share a little smaller; and England's share stands for Scotland's and Wales's. An issue tracks carrying households' council tax on other property." }, "axiom": { "metric_name": "obr/council_tax", @@ -2520,7 +2520,37 @@ }, "category_id": "obr.efo_expenditure", "label": "Council tax", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "target_id": "obr.council_tax_england", From e78129dd50f13947aef79755ab1efde817f08ce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:36:15 +0000 Subject: [PATCH 10/39] =?UTF-8?q?Record=20Mar=C3=ADa's=20rulings=20on=20th?= =?UTF-8?q?ree=20signed=20exclusions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095, María's rulings of 2026-10-29: - D3: ons.population.scotland_households_3plus_children stays signed out, but its reason was wrong: a fact exists, Chronicle's Scotland cut, and it counts couple households only, so binding it would fix part of the group and leave lone parents free. The register entry takes the corrected reason (couples_only_composition_fact), her approval of 2026-10-29 and an adjudication line; it tracks #1095, as #736 closed. - D18a: ONS's small-area income rows (BHC and AHC means, housing costs) were deferred "pending the signed mean-aggregation design". ONS models them from the FRS, so binding them would partly fit the FRS to itself: they are kept out as circular (frs_model_based_circularity). - D18c: Northern Ireland's UC area cells stay out; the reason now records that DfC publishes claimants, counting a joint claim twice (uk-data#590). The membership and local surfaces carry the new texts at the shared regeneration; test_uk_target_references pins the D3 text to the new reason. Co-Authored-By: Claude Opus 5.5 --- .../1095-uk-signed-exclusion-rulings.changed.md | 1 + .../uk/target_reference_signed_exclusions.json | 9 +++++---- .../engine_free/uk/test_uk_target_references.py | 17 +++++++++++------ tools/generate_uk_local_target_references.py | 8 ++++---- 4 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 changelog.d/1095-uk-signed-exclusion-rulings.changed.md diff --git a/changelog.d/1095-uk-signed-exclusion-rulings.changed.md b/changelog.d/1095-uk-signed-exclusion-rulings.changed.md new file mode 100644 index 0000000000..4058656607 --- /dev/null +++ b/changelog.d/1095-uk-signed-exclusion-rulings.changed.md @@ -0,0 +1 @@ +Scotland's households with three or more children stay signed out with a corrected reason, Chronicle's Scotland cut counting couple households only (microcosm#1095 D3); ONS's small-area income rows are kept out as circular, ONS modelling them from the FRS (D18a); and Northern Ireland's UC area cells stay out, DfC counting claimants rather than households (D18c). María's rulings of 2026-10-29. diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json index 9fc3d0154f..10c7bf7fa9 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json @@ -3,11 +3,12 @@ "exclusions": [ { "target_id": "ons.population.scotland_households_3plus_children", - "reason_id": "no_household_composition_fact", - "rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration.", - "tracking": "microcosm#736", + "reason_id": "couples_only_composition_fact", + "rationale": "Kept out: Chronicle's Scotland household-composition cut counts couple households only, so binding it would fix part of the group and leave lone parents free, and the current selector reaches person-level ONS mid-year population age rows, not households with three or more children (María's ruling of 2026-10-29, microcosm#1095 D3).", + "tracking": "microcosm#1095", "approved_by": "juaristi22", - "approved_on": "2026-09-05" + "approved_on": "2026-10-29", + "adjudication": "María in session, 2026-10-29: keep Scotland's households with three or more children out, and correct the reason (microcosm#1095 D3)." }, { "target_id": "dft.bus_fare_receipts.england_outside_london", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 624f2893a7..6143e1f1ea 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -1044,6 +1044,16 @@ def haystack(target: dict) -> str: ] +#: microcosm#1095 D3, María's ruling of 2026-10-29. +SCOTLAND_THREE_PLUS_RATIONALE = ( + "Kept out: Chronicle's Scotland household-composition cut counts " + "couple households only, so binding it would fix part of the group and " + "leave lone parents free, and the current selector reaches person-level " + "ONS mid-year population age rows, not households with three or more " + "children (María's ruling of 2026-10-29, microcosm#1095 D3)." +) + + def test_uk_target_reference_membership_report_is_packaged() -> None: membership = _load_uk_resource("target_reference_membership.json") @@ -1281,12 +1291,7 @@ def test_uk_target_reference_membership_report_is_packaged() -> None: "family": "ons_population", "target_id": "ons.population.scotland_households_3plus_children", "status": "signed_excluded", - "signed_rationale": ( - "Signed out pending a Scotland household-composition fact: " - "the current selector reaches person-level ONS mid-year " - "population age rows, not households with three or more " - "children. microcosm#736 tracks the missing declaration." - ), + "signed_rationale": SCOTLAND_THREE_PLUS_RATIONALE, }, ] assert membership["multi_fact_rationales"] == [] diff --git a/tools/generate_uk_local_target_references.py b/tools/generate_uk_local_target_references.py index ecadc78ece..2a33e2e662 100644 --- a/tools/generate_uk_local_target_references.py +++ b/tools/generate_uk_local_target_references.py @@ -510,14 +510,14 @@ def add( target_id="dwp.uc.households_by_area", geography_level="constituency", reason_id="uc_gb_only_ni_absent", - rationale="DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts.", + rationale="DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (María's ruling of 2026-10-29, microcosm#1095 D18c).", area_ids=ni_constituencies, ) add( target_id="dwp.uc.households_by_area", geography_level="local_authority", reason_id="uc_gb_only_ni_absent", - rationale="DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts.", + rationale="DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (María's ruling of 2026-10-29, microcosm#1095 D18c).", area_ids=ni_local_authorities, ) for target_id in ( @@ -562,8 +562,8 @@ def add( add( target_id=target_id, geography_level="local_authority", - reason_id="msoa_mean_to_la_deferred", - rationale="ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design.", + reason_id="frs_model_based_circularity", + rationale="Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (María's ruling of 2026-10-29, microcosm#1095 D18a).", area_ids=local_authority_ids, ) add( From ab24bbe02f7be7014940a92287c5e4ff8ea446ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:38:59 +0000 Subject: [PATCH 11/39] Correct stale tracker text in notes and code comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095's "stale register and gate text" items that need no signature: - weight_year's docstring quoted 0.72% growth from 2024 to 2025, the figure before policyengine-uk 2.155.0's population; it now points at the pinned dataset_projection block, which every lock re-pins. - The certifier and the calibration run said local-candidate gates stay out of national certification "until microcosm#146"; #146 closed when the local variant shipped, so they now say the local line certifies them. - was_wealth's bedrooms note pointed at the closed #145; the question is #1095's "num_bedrooms as a WAS predictor" (uk-data#463). - dwp.uc.households_lcwra_element's note quoted a September baseline and an open #882 question; it now records pe-uk#1989's proxy and María's NS6 ruling of 2026-10-29 to keep it. - obr.universal_credit's note said both "UK incl. Northern Ireland" and "Scoped to Great Britain" (CF1); it now says Great Britain. - obr.sdlt's note called pe-uk#2322 unreleased; it has been in the lock since #1400, and the note now states how its projection compares with the row's. Signed register text (the JSA and ORR reasons, tracking fields of closed issues) waits for the renewals PR, so each entry is re-signed once. Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/uk/uk_population_targets.json | 6 +++--- .../src/microcosm/build/uk_runtime/calibration_run.py | 4 ++-- .../src/microcosm/build/uk_runtime/release_certification.py | 4 ++-- .../src/microcosm/build/uk_runtime/was_wealth.py | 6 ++++-- .../src/microcosm/build/uk_runtime/weight_year.py | 3 ++- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 1eabd10a47..df474d8c86 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -2260,7 +2260,7 @@ "policyengine": { "metric_name": "obr/sdlt", "value_variable": "stamp_duty_land_tax", - "notes": "Households' SDLT: the OBR's SDLT line at the calendar-2025 window of its fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane), times individuals' share of HMRC's 2024-25 SDLT receipts, residential (Table 8a) and non-residential (Table 8b) together. The OBR line covers every buyer, and HMRC's other buyers (companies, partnerships and collective investment schemes) pay about a third of it; policyengine-uk charges households' stamp_duty_land_tax and adds corporate_sdlt beside it, so binding the whole line pushed households' SDLT up by the companies' share (uk-data#564, microcosm#1095). uk-data#569 (a draft, at 0544d692f) subtracts policyengine-uk's corporate SDLT statistic instead, which needs the unreleased pe-uk#2322; the receipts share is HMRC's own outturn split, and the window's 2025-26 months take 2024-25's. Three gaps are declared, not corrected: non-resident individuals' SDLT, surcharge included, stays inside the individuals' share, though no FRS household is non-resident; Table 6b counts the higher rates before refunds on replacement main homes, and policyengine-uk charges them with no refund, while Tables 8a and 8b and the OBR line are net of refunds; and the main-home purchase rate policyengine-uk applies also counts the higher-rates transactions, so those purchases are partly counted twice (review of #1308)." + "notes": "Households' SDLT: the OBR's SDLT line at the calendar-2025 window of its fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane), times individuals' share of HMRC's 2024-25 SDLT receipts, residential (Table 8a) and non-residential (Table 8b) together. The OBR line covers every buyer, and HMRC's other buyers (companies, partnerships and collective investment schemes) pay about a third of it; policyengine-uk charges households' stamp_duty_land_tax and adds corporate_sdlt beside it, so binding the whole line pushed households' SDLT up by the companies' share (uk-data#564, microcosm#1095). uk-data#569 subtracts policyengine-uk's corporate SDLT statistic instead. pe-uk#2322 has merged (in the lock since microcosm#1400): it projects each buyer type's 2024-25 share of each property type's receipts with the OBR's forecast for the type, so the two routes differ only in applying the share per property type rather than to the whole line. The receipts share here is HMRC's own outturn split, and the window's 2025-26 months take 2024-25's. Three gaps are declared, not corrected: non-resident individuals' SDLT, surcharge included, stays inside the individuals' share, though no FRS household is non-resident; Table 6b counts the higher rates before refunds on replacement main homes, and policyengine-uk charges them with no refund, while Tables 8a and 8b and the OBR line are net of refunds; and the main-home purchase rate policyengine-uk applies also counts the higher-rates transactions, so those purchases are partly counted twice (review of #1308)." }, "axiom": { "metric_name": "obr/sdlt", @@ -18158,7 +18158,7 @@ "value": 0 } ], - "notes": "Mean monthly paid GB benefit units over the declared months. Benefit units with a positive LCWRA element among positive UC awards, against DWP's Stat-Xplore element entitlement crossed with Payment Indicator = Yes (chronicle#260), the same paid-claim basis as the family-type rows. The publisher group value 'LCWRA' covers both rates; before April 2026 every LCWRA household is 'LCWRA - Higher'. The engine's LCWRA flag is the is_disabled_for_benefits input, not a work-capability assessment; the row stays in the objective because the mismatch leaves it inside the 25 percent release bound at the 10 September 2026 baseline (+15 percent on Q50f, +20 percent on D2), while carer and childcare, whose concept gaps put them outside it, sit on the measure-exclusion register. Whether the passthrough itself warrants an engine change is a Step 3 question under #882. Count only the Great Britain regions, matching K03000001; DWP removes Northern Ireland-office claims from these statistics. Source: https://www.gov.uk/government/publications/universal-credit-statistics-background-information-and-methodology/universal-credit-statistics-background-information-and-methodology#creating-a-great-britain-dataset Source: https://github.com/PolicyEngine/chronicle/pull/260", + "notes": "Mean monthly paid GB benefit units over the declared months. Benefit units with a positive LCWRA element among positive UC awards, against DWP's Stat-Xplore element entitlement crossed with Payment Indicator = Yes (chronicle#260), the same paid-claim basis as the family-type rows. The publisher group value 'LCWRA' covers both rates; before April 2026 every LCWRA household is 'LCWRA - Higher'. The engine gives the LCWRA element on the claimants' own is_disabled_for_benefits flag (pe-uk#1989), a proxy, not a work-capability assessment. María ruled on 2026-10-29 to keep the proxy (microcosm#1095 NS6): the row stays in the objective while it sits inside the release bound, and carer and childcare, whose concept gaps put them outside it, sit on the measure-exclusion register. Count only the Great Britain regions, matching K03000001; DWP removes Northern Ireland-office claims from these statistics. Source: https://www.gov.uk/government/publications/universal-credit-statistics-background-information-and-methodology/universal-credit-statistics-background-information-and-methodology#creating-a-great-britain-dataset Source: https://github.com/PolicyEngine/chronicle/pull/260", "household_conditions": [ { "variable": "region", @@ -18985,7 +18985,7 @@ "map_to": "benunit" } ], - "notes": "Total UC expenditure: the sum of the OBR EFO welfare-cap cells (universal_credit_in_cap + universal_credit_outside_cap), bound at the calendar-2025 window of the two cells' fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window over the two-concept selector, one series per concept) so the total and its two components share one basis (Vahid's review of microcosm#1006, item 3) against the model's annual award after the benefit cap and deductions at policy year 2025, UK incl. Northern Ireland. The split rows are retired (registry_parity.excluded): the model cannot attribute spend to the welfare-cap concept (microcosm#757, #1095). Cash advances and third-party payments are not modelled (#882). Scoped to Great Britain (microcosm#1095, uk-data#490): OBR table 4.9 reports this line inside 'DWP social security', whose figures cover Great Britain and residents overseas (DWP benefit expenditure and caseload tables, Spring 2026, Notes 3), and lists Northern Ireland social security on rows of its own, so the model column sums Great Britain households only. Since the abf0921 re-pin the Chronicle fact carries the Great Britain code K03000001 (microcosm#1300)." + "notes": "Total UC expenditure: the sum of the OBR EFO welfare-cap cells (universal_credit_in_cap + universal_credit_outside_cap), bound at the calendar-2025 window of the two cells' fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window over the two-concept selector, one series per concept) so the total and its two components share one basis (Vahid's review of microcosm#1006, item 3) against the model's annual award after the benefit cap and deductions at policy year 2025, over Great Britain (below). The split rows are retired (registry_parity.excluded): the model cannot attribute spend to the welfare-cap concept (microcosm#757, #1095). Cash advances and third-party payments are not modelled (microcosm#1095, from #882). Scoped to Great Britain (microcosm#1095, uk-data#490): OBR table 4.9 reports this line inside 'DWP social security', whose figures cover Great Britain and residents overseas (DWP benefit expenditure and caseload tables, Spring 2026, Notes 3), and lists Northern Ireland social security on rows of its own, so the model column sums Great Britain households only. Since the abf0921 re-pin the Chronicle fact carries the Great Britain code K03000001 (microcosm#1300)." }, "axiom": { "metric_name": "obr/universal_credit", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py index 6298dbc81e..fb63b123e3 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py @@ -237,8 +237,8 @@ def _scope_exclusions() -> dict[str, str]: elif gate_id in local: reason = ( "local-candidate gate; owned by the rowwise candidate's " - "scoped battery and excluded from national certification " - "until microcosm#146." + "scoped battery and certified on the local line, not the " + "national one (microcosm#146 shipped the local variant)." ) elif gate_id in UK_LOCAL_DIAGNOSTIC_GATE_SCOPE: reason = ( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/release_certification.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/release_certification.py index 9785ca34e8..5ea5968bf8 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/release_certification.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/release_certification.py @@ -157,8 +157,8 @@ def uk_release_cut_scope_exclusions() -> dict[str, str]: ) elif entry.id in UK_CERTIFICATION_EXCLUDED_GATE_IDS: exclusions[entry.id] = ( - "local-candidate gate; excluded from national certification " - "until microcosm#146." + "local-candidate gate; certified on the local line, not the " + "national one (microcosm#146 shipped the local variant)." ) else: # pragma: no cover - closed-world classification is import-enforced raise RuntimeError( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/was_wealth.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/was_wealth.py index 3205a061f5..3ff054373e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/was_wealth.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/was_wealth.py @@ -279,7 +279,7 @@ #: which the 2026-08-19 licensed audit found carrying them: vcarnr8 (2 rows #: of -8) and HBedRmR8 (95.8% -8 - the bedrooms question is effectively #: unasked in the WAS household file; the predictor-quality question is -#: registered for the end-of-workstream revisit on microcosm#145). +#: tracked in microcosm#1095 as num_bedrooms as a WAS predictor, uk-data#463). #: DVPriRntR8's -9 is structural not-applicable (not a private renter), so #: the private-renter reading (code 1) is already correct; genuinely negative #: domains (net financial wealth, self-employment losses, BHC income) are @@ -617,7 +617,9 @@ def clean_was_household_table(raw: pd.DataFrame) -> pd.DataFrame: ) _assert_donor_net_financial_identity(cleaned) secured = cleaned[list(UK_WAS_PROPERTY_SECURED_DEBT)].sum(axis=1) - above = secured - cleaned[UK_WAS_SECURED_DEBT_WITHIN] > UK_WAS_IDENTITY_TOLERANCE_GBP + above = ( + secured - cleaned[UK_WAS_SECURED_DEBT_WITHIN] > UK_WAS_IDENTITY_TOLERANCE_GBP + ) if above.any(): raise ValueError( f"WAS donor secured debt {list(UK_WAS_PROPERTY_SECURED_DEBT)} passes " diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/weight_year.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/weight_year.py index 5d7f3c97f3..2a7e44a245 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/weight_year.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/weight_year.py @@ -8,7 +8,8 @@ The UK release is stamped with the survey year and its weights are solved at the calibration year. Written as solved, they read high at the calibration -year by the growth between the two: 0.72% from 2024 to 2025. uk-data#538 is the +year by the growth between the two, which the ``dataset_projection`` block of +``uk/hmrc_uprating_engine_pins.json`` pins for each engine lock. uk-data#538 is the incumbent's version of the same mechanism, with the opposite sign. So the release writes the solved weights divided by the engine's own factor, From d2a1f9cd4e2f53c7fc1785575d0e50ef5ed93b87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:42:02 +0000 Subject: [PATCH 12/39] Record each stage's rewrites in its stage record microcosm#721 (tracked in #1095): a stage can declare rewrites, columns an earlier stage produced that it replaces, but StageRecord kept only the declared outputs, so provenance credited a rewritten column to its first producer, and the UK spine's final nonzero-share list kept a hard-coded FRS_EDUCATION_GRANT_REWRITES carve-out (redundant, as frs_spine already produces education_grants). StageRecord gains rewrote, the stage's declared rewrites, and its nonzero_share covers them as they stand after the stage. A rewrite absent after the stage is refused, like a missing output. The spine manifest's stage_records carry rewrote, and the final list reads every record's outputs and rewrites, so the carve-out and its import go. #721 can close once this lands. Co-Authored-By: Claude Opus 5.5 --- .../721-stage-record-rewrites.changed.md | 1 + .../src/microcosm/build/plan.py | 21 ++++++++--- .../microcosm/build/uk_runtime/spine_build.py | 7 ++-- .../tests/engine_free/shared/test_plan.py | 37 +++++++++++++++++++ 4 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 changelog.d/721-stage-record-rewrites.changed.md diff --git a/changelog.d/721-stage-record-rewrites.changed.md b/changelog.d/721-stage-record-rewrites.changed.md new file mode 100644 index 0000000000..f56f9e0ae3 --- /dev/null +++ b/changelog.d/721-stage-record-rewrites.changed.md @@ -0,0 +1 @@ +Stage records list the columns each stage rewrote, with their nonzero share after it, so build provenance names the last writer of a column; the UK spine manifest carries them, and the final nonzero-share list reads them instead of a hard-coded carve-out (microcosm#721, via microcosm#1095). diff --git a/packages/microcosm-build/src/microcosm/build/plan.py b/packages/microcosm-build/src/microcosm/build/plan.py index 649ff22893..7b01f2339b 100644 --- a/packages/microcosm-build/src/microcosm/build/plan.py +++ b/packages/microcosm-build/src/microcosm/build/plan.py @@ -114,10 +114,14 @@ class StageRecord: stage: The stage's name. produced: The columns it added. donor_survey: The donor survey name, if the stage imputes. - nonzero_share: Produced column -> share of records with a non-zero - (or True) value — the layer-population evidence the parity gate - and the observatory read. + nonzero_share: Produced or rewritten column -> share of records with + a non-zero (or True) value after the stage — the + layer-population evidence the parity gate and the observatory + read. seconds: Wall-clock duration of the transform. + rewrote: The declared rewrites: columns an earlier stage produced + that this stage replaced, so provenance names the last writer + (microcosm#721). """ stage: str @@ -125,6 +129,7 @@ class StageRecord: donor_survey: str | None nonzero_share: Mapping[str, float] = field(default_factory=dict) seconds: float = 0.0 + rewrote: tuple[str, ...] = () class StagePlan: @@ -226,12 +231,17 @@ def run( f"{type(result).__name__}." ) shares: dict[str, float] = {} - for column in stage.produces: + declared = ( + *stage.produces, + *(c for c in stage.rewrites if c not in stage.produces), + ) + for column in declared: + verb = "produces" if column in stage.produces else "rewrites" try: entity = result.column_entity(column) except ValueError as error: raise ValueError( - f"Stage {stage.name!r} declared it produces " + f"Stage {stage.name!r} declared it {verb} " f"{column!r} but the column is absent after the " "stage ran." ) from error @@ -244,6 +254,7 @@ def run( donor_survey=stage.donor.survey if stage.donor else None, nonzero_share=shares, seconds=elapsed, + rewrote=stage.rewrites, ) records.append(record) donor_note = f" <- {stage.donor.survey}" if stage.donor is not None else "" diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py index a2947aae7c..33301bdd7e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py @@ -104,7 +104,6 @@ from microcosm.build.uk_runtime.frs_disability import UKFRSDisabilityStageTransform from microcosm.build.uk_runtime.frs_education import UKFRSEducationStageTransform from microcosm.build.uk_runtime.frs_education_grants import ( - FRS_EDUCATION_GRANT_REWRITES, UKFRSEducationGrantSplitStageTransform, ) from microcosm.build.uk_runtime.frs_employment import UKFRSEmploymentStageTransform @@ -889,6 +888,7 @@ def _build_sidecar( { "stage": record.stage, "produced": list(record.produced), + "rewrote": list(record.rewrote), "nonzero_share": dict(record.nonzero_share), "seconds": record.seconds, } @@ -2332,8 +2332,9 @@ def _checkpoint_link(path: Path) -> str: if args.emit_nonzero_shares is not None: final_columns = list( dict.fromkeys( - [column for record in records for column in record.produced] - + list(FRS_EDUCATION_GRANT_REWRITES) + column + for record in records + for column in (*record.produced, *record.rewrote) ) ) atomic_write_json( diff --git a/packages/microcosm-build/tests/engine_free/shared/test_plan.py b/packages/microcosm-build/tests/engine_free/shared/test_plan.py index 859bdc7ad1..b4632345a3 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_plan.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_plan.py @@ -118,6 +118,43 @@ def test_run_produces_columns_and_records(self, small_frame) -> None: assert len(lines) == 2 and "Fed SCF 2022" in lines[0] assert plan.donors() == (("wealth", SCF),) + def test_a_rewrite_records_the_last_writer_and_its_share(self, small_frame) -> None: + """A rewriting stage names the column and its share after it (#721).""" + + plan = StagePlan( + [ + Stage( + name="wealth", + transform=_add_column( + "net_worth", np.asarray([1e5, 0.0, 2e5, 0.0]) + ), + produces=("net_worth",), + ), + Stage( + name="split", + transform=_add_column( + "net_worth", np.asarray([1e5, 3e4, 2e5, 0.0]) + ), + rewrites=("net_worth",), + ), + ] + ) + _, records = plan.run(small_frame) + assert records[0].rewrote == () + assert records[0].nonzero_share == {"net_worth": pytest.approx(0.5)} + assert records[1].produced == () + assert records[1].rewrote == ("net_worth",) + assert records[1].nonzero_share == {"net_worth": pytest.approx(0.75)} + + def test_a_declared_rewrite_absent_after_the_stage_is_refused( + self, small_frame + ) -> None: + plan = StagePlan( + [Stage(name="split", transform=lambda frame: frame, rewrites=("gone",))] + ) + with pytest.raises(ValueError, match="declared it rewrites 'gone'"): + plan.run(small_frame) + def test_observer_reports_ordered_aggregate_stage_lifecycle( self, small_frame ) -> None: From 164bf6b7beed9591e7d340295cdff69cf4a0ff62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:44:13 +0000 Subject: [PATCH 13/39] Keep support-floor deferrals inside each target's nations microcosm#1095 (from #796): the support-floor loop deferred E06000053 and E09000001 for every local-authority target outside the bound families, including the nine Welsh and eight Scottish families whose area_scope holds no English authority, so their membership listed deferrals for cells they never have. The loop now reads each target's local_authority gss_prefixes, keeps only the areas in scope, and skips a target with none. Thirty-two targets take the deferral (59 area entries, E06000053 in 27 and E09000001 in 32), down from 49 (93; 44 and 49). The local references and membership regenerate with the shared regeneration. Co-Authored-By: Claude Opus 5.5 --- ...upport-floor-deferrals-follow-scope.fixed.md | 1 + .../uk/test_uk_council_tax_targets.py | 10 ++++++---- tools/generate_uk_local_target_references.py | 17 ++++++++++++++++- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 changelog.d/1095-uk-support-floor-deferrals-follow-scope.fixed.md diff --git a/changelog.d/1095-uk-support-floor-deferrals-follow-scope.fixed.md b/changelog.d/1095-uk-support-floor-deferrals-follow-scope.fixed.md new file mode 100644 index 0000000000..a3dccfbc9f --- /dev/null +++ b/changelog.d/1095-uk-support-floor-deferrals-follow-scope.fixed.md @@ -0,0 +1 @@ +The local generator's support-floor deferrals for the Isles of Scilly and the City of London follow each target's area scope: the nine Welsh and eight Scottish local-authority families have no cell at those English authorities and no longer list them (microcosm#796 item, via microcosm#1095). diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py index d86c7bf849..ce3f25f01a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py @@ -527,14 +527,16 @@ def test_a14_deferral_declarations_cover_only_currently_active_cells() -> None: # microcosm#1240: the three high_value_homes local-authority legs take the # same support-floor deferral on the Isles of Scilly and the City of London; # microcosm#1207's three DESNZ energy rows take it too, and so do - # microcosm#1095's single adult discount cells. - assert len(support) == 49 - assert sum(len(row.area_ids) for row in support) == 93 + # microcosm#1095's single adult discount cells. A target scoped to Wales + # or Scotland has no cell at the two English authorities, so the nine + # Welsh and eight Scottish families take none (microcosm#796, via #1095). + assert len(support) == 32 + assert sum(len(row.area_ids) for row in support) == 59 by_area = { area_id: sum(area_id in row.area_ids for row in support) for area_id in ("E06000053", "E09000001") } - assert by_area == {"E06000053": 44, "E09000001": 49} + assert by_area == {"E06000053": 27, "E09000001": 32} assert all(row.defer_if_compiles for row in support) assert "mhclg.council_tax_stock.by_area.band_h" not in { row.target_id for row in support diff --git a/tools/generate_uk_local_target_references.py b/tools/generate_uk_local_target_references.py index 2a33e2e662..5d96c58159 100644 --- a/tools/generate_uk_local_target_references.py +++ b/tools/generate_uk_local_target_references.py @@ -722,6 +722,21 @@ def add( continue if str(target.get("family")) in support_floor_binding_families: continue + # A target scoped to other nations has no cell at these English + # authorities, so nothing of its own to defer (microcosm#796). + prefixes = tuple( + ((target.get("area_scope") or {}).get("local_authority") or {}).get( + "gss_prefixes" + ) + or () + ) + in_scope = tuple( + area_id + for area_id in support_floor_excluded_area_ids + if not prefixes or area_id.startswith(prefixes) + ) + if not in_scope: + continue add( target_id=str(target["target_id"]), geography_level="local_authority", @@ -736,7 +751,7 @@ def add( "constituency families and the national rows (A14 amendment " "to A4)." ), - area_ids=support_floor_excluded_area_ids, + area_ids=in_scope, allow_empty=True, defer_if_compiles=True, skip_declared=True, From 93892d7b7ec7eda0a28570fbc42c1ba2c117fd75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 13:59:53 +0000 Subject: [PATCH 14/39] Describe the current build in three UK gate declarations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 items from #688, #796 and #757. - uk_zero_weight_strata: the two strata kept June's caps of 100,000 each, 10,000 SPI-synthetic households times ten output-area clones, a grain the national seam no longer builds. Its calibrated control of 2026-10-28 (4374e0bf) holds 78,093 households and no zero-weight row in any of the four SPI-synthetic and capital-gains-clone strata, because the SPI stage gives the stacked donors their prior mass before calibration. Both strata are re-declared at a cap of 0 under current names; they keep their selectors so that a zero-weight row there is named by stratum. - uk_export_surface: the reviewed exclusion for person.incapacity_benefit_reported never matched. The pinned reference (efrs_parity_reference.json) lists the all-zero column among its zero-share inputs, not on its export surface, so the gate reported the exclusion as unused. The release boundary still drops the column, and the shared check refuses it as an unlisted extra, so the guard holds without it. - macro_realism: María ruled on 2026-10-29 to drop it and record why. The plan declared it not_applicable, but the release contract's verifier refuses an excused entry in this spec vintage (test_gate_battery_contract_ pins holds every UK entry to not_applicable None). So the battery's policy text records the reason: the solve binds the household income components directly, and the national accounts' household disposable income differs in scope (imputed rent and, in the headline series, non-profit institutions serving households). The battery, part and dense digests in microcosm-data's contract move with the manifest, as in a094f5d56. The take-up stage-time checks (her ruling of 2026-10-29) follow in their own commit. The Carer's Allowance stage-health gate waits on her: the take-up contract records her 2026-10-20 ruling of no such gate until a caseload target binds the rate. Co-Authored-By: Claude Opus 5.5 --- ...5-uk-gate-battery-current-grain.changed.md | 1 + .../src/microcosm/build/uk/gates.json | 19 +++++------ .../build/uk_runtime/national_frame.py | 9 ++--- .../build/uk_runtime/terminal_gates.py | 34 +++++++++++-------- .../engine_free/shared/test_country_spec.py | 2 +- .../engine_free/uk/test_uk_terminal_gates.py | 34 +++++++++++++++++-- .../src/microcosm/data/contract.py | 20 +++++------ .../tests/engine_free/shared/test_contract.py | 6 ++-- 8 files changed, 80 insertions(+), 45 deletions(-) create mode 100644 changelog.d/1095-uk-gate-battery-current-grain.changed.md diff --git a/changelog.d/1095-uk-gate-battery-current-grain.changed.md b/changelog.d/1095-uk-gate-battery-current-grain.changed.md new file mode 100644 index 0000000000..68c4342b84 --- /dev/null +++ b/changelog.d/1095-uk-gate-battery-current-grain.changed.md @@ -0,0 +1 @@ +The UK gate battery describes the current build: the zero-weight strata are capped at 0 (the June caps of 100,000 counted the retired ten-clone grain, and the national seam ships no zero-weight row), the export-surface gate drops its all-zero incapacity benefit exclusion, which never matched the pinned reference, and the battery records why it declares no macro_realism band (microcosm#1095, from #688, #796 and #757). diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index 2e6322ac42..c4f571a1f2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -1,7 +1,7 @@ { "version": 1, "country": "uk", - "policy": "The certified June UK national battery declared as data (microcosm#611): the two build preflights plus the terminal battery. Every gate carries its thresholds as entry parameters at exact certified or receipted values; microcosm#630 landed the weighted-integrity pair as reviewed parameter edits with receipts in the entry notes, and the weight-ratio fence keeps its exact certified June value (the #630 breach was an SPI allocation defect fixed upstream in microcosm#710). The #680 stochastic layer delivers the take-up signal gate; every gate the UK runs today is declared below.", + "policy": "The certified June UK national battery declared as data (microcosm#611): the two build preflights plus the terminal battery. Every gate carries its thresholds as entry parameters at exact certified or receipted values; microcosm#630 landed the weighted-integrity pair as reviewed parameter edits with receipts in the entry notes, and the weight-ratio fence keeps its exact certified June value (the #630 breach was an SPI allocation defect fixed upstream in microcosm#710). The #680 stochastic layer delivers the take-up signal gate; every gate the UK runs today is declared below. The shared macro_realism band is not declared (microcosm#757, María's ruling of 2026-10-29): the solve binds the household income components directly, and the national accounts' household disposable income differs in scope (it counts owner-occupiers' imputed rent and, in its headline series, non-profit institutions serving households), so a band against it would test the scope gap, not the file. The release contract's verifier refuses an excused (not_applicable) entry in this spec vintage, so the reason is recorded here.", "phases": [ "preflight", "assembled", @@ -942,26 +942,26 @@ "parameters": { "declarations": [ { - "name": "june_spi_synthetic_base", + "name": "spi_synthetic_base", "selector": { "household_is_capital_gains_clone": false, "household_is_spi_synthetic": true }, - "maximum_zero_weight_rows": 100000, - "reason": "The certified June FRS-derived artifact ships 100,000 zero-weight SPI-synthetic non-capital-gains rows." + "maximum_zero_weight_rows": 0, + "reason": "No SPI-synthetic non-capital-gains row may carry zero weight: the SPI stage gives the stacked donors their prior mass before calibration, and the national seam's calibrated control of 2026-10-28 (4374e0bf) ships none at zero." }, { - "name": "june_spi_synthetic_capital_gains", + "name": "spi_synthetic_capital_gains", "selector": { "household_is_capital_gains_clone": true, "household_is_spi_synthetic": true }, - "maximum_zero_weight_rows": 100000, - "reason": "The certified June FRS-derived artifact ships 100,000 zero-weight SPI-synthetic capital-gains-clone rows." + "maximum_zero_weight_rows": 0, + "reason": "No SPI-synthetic capital-gains-clone row may carry zero weight: the SPI stage gives the stacked donors their prior mass before calibration, and the national seam's calibrated control of 2026-10-28 (4374e0bf) ships none at zero." } ] }, - "notes": "Zero household weight is legal only inside the two reviewed June SPI-synthetic strata, each capped at its shipped size." + "notes": "No household may carry zero weight (microcosm#1095, re-declared from #688). The two SPI-synthetic strata keep their selectors at a cap of 0, so a zero-weight row there is named by stratum, and one anywhere else fails as unmatched. The June caps of 100,000 each counted 10,000 SPI-synthetic households times ten output-area clones, a grain the national seam no longer builds: its calibrated control of 2026-10-28 (4374e0bf) holds 78,093 households and no zero-weight row in any of the four SPI-synthetic and capital-gains-clone strata." }, { "id": "uk_weight_ess", @@ -1322,11 +1322,10 @@ "household.non_residential_property_secured_debt" ], "reviewed_exclusions": { - "person.incapacity_benefit_reported": "The enhanced FRS stores this legacy reported-benefit input as an all-zero layer; the candidate must drop dead zero layers.", "household.property_wealth": "policyengine-uk derives property_wealth from main_residence_value, other_residential_property_value and non_residential_property_value; a persisted copy overrides that sum and has no uprating index, so the candidate must drop it (microcosm#1106, the uk-data#543 defect)." } }, - "notes": "Reviewed candidate-only fields from the June UK prototype (source provenance or genuine additional model inputs, not incumbent-surface losses), with household.uses_energy_prepayment_meter added for microcosm#1110 (the LCFS prepayment-meter flag policyengine-uk reads from 2.123.3 for the Energy Price Guarantee prepayment discount; an older engine ignores it, and the incumbent does not carry it until uk-data#539), the LCFS excise step's 24 household inputs added for microcosm#1359 (alcohol litres and the beer and cider draught shares, tobacco a week and the gambling duty bases; policyengine-uk reads the alcohol and tobacco ones from 2.145.0 and the gambling ones from 2.151.0, an older engine ignores them, and the incumbent carries none) plus the two reviewed reference-side exclusions (the all-zero incapacity benefit layer and the formula-owned property_wealth total, microcosm#1106). The two hard-required columns that may never be waived stay a code-level guard, per the microcosm#327 rule that a parity comparison's registers are declared inputs. During the migration window the runtime merges the exclusion register with the legacy constant and the spec-pin tests hold the two equal; the register becomes solely load-bearing when the constant retires." + "notes": "Reviewed candidate-only fields from the June UK prototype (source provenance or genuine additional model inputs, not incumbent-surface losses), with household.uses_energy_prepayment_meter added for microcosm#1110 (the LCFS prepayment-meter flag policyengine-uk reads from 2.123.3 for the Energy Price Guarantee prepayment discount; an older engine ignores it, and the incumbent does not carry it until uk-data#539), the LCFS excise step's 24 household inputs added for microcosm#1359 (alcohol litres and the beer and cider draught shares, tobacco a week and the gambling duty bases; policyengine-uk reads the alcohol and tobacco ones from 2.145.0 and the gambling ones from 2.151.0, an older engine ignores them, and the incumbent carries none) plus the reviewed reference-side exclusion of the formula-owned property_wealth total (microcosm#1106). The all-zero incapacity benefit layer left the exclusions (microcosm#1095, from #796): the pinned reference lists it among its zero-share inputs, not on its export surface, so its exclusion never matched; the release boundary still drops the column, and this gate would refuse it as an unlisted extra. The two hard-required columns that may never be waived stay a code-level guard, per the microcosm#327 rule that a parity comparison's registers are declared inputs. During the migration window the runtime merges the exclusion register with the legacy constant and the spec-pin tests hold the two equal; the register becomes solely load-bearing when the constant retires." }, { "id": "uk_take_up_signal", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_frame.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_frame.py index 9b9ca065ee..9d0f8dded5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_frame.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_frame.py @@ -533,10 +533,11 @@ def _write_uk_single_year_tables( #: Columns the release boundary drops from the written candidate (microcosm#1063 #: c9): the enhanced FRS stores ``incapacity_benefit_reported`` as an all-zero -#: legacy layer and the export-surface gate's reviewed exclusion requires the -#: candidate to drop it. The spine keeps the column (the SPI income stage -#: reads it); only the release H5 and its readback expectation lose it. -#: ``terminal_gates.UK_REVIEWED_EXPORT_EXCLUSIONS`` names the first; the +#: legacy layer, so the pinned parity reference leaves it off the export +#: surface as a zero-share input, and the export-surface gate would refuse it +#: as an unlisted extra (microcosm#1095 retired its reviewed exclusion, which +#: never matched). The spine keeps the column (the SPI income stage reads it); +#: only the release H5 and its readback expectation lose it. The #: five internal disability carriers (``frs_disability``'s #: ``UK_INTERNAL_DISABILITY_REPORTED_COLUMNS``) are stage-internal inputs #: that the export registers keep off the release (review of #1089). diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/terminal_gates.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/terminal_gates.py index d929ebf25a..f013830119 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/terminal_gates.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/terminal_gates.py @@ -137,23 +137,32 @@ def __post_init__(self) -> None: object.__setattr__(self, "selector", dict(sorted(normalized.items()))) +# No household may carry zero weight (microcosm#1095, re-declared from #688): +# the two SPI-synthetic strata keep their selectors at a cap of 0, so a +# zero-weight row there is named by stratum, and one anywhere else fails as +# unmatched. The June caps of 100,000 counted 10,000 SPI-synthetic households +# times ten output-area clones, a grain the national seam no longer builds. UK_DEFAULT_ZERO_WEIGHT_STRATA: tuple[UKZeroWeightStratumDeclaration, ...] = ( UKZeroWeightStratumDeclaration( - name="june_spi_synthetic_base", + name="spi_synthetic_base", selector={_SPI_FLAG: True, _CAPITAL_GAINS_FLAG: False}, - maximum_zero_weight_rows=100_000, + maximum_zero_weight_rows=0, reason=( - "The certified June FRS-derived artifact ships 100,000 zero-weight " - "SPI-synthetic non-capital-gains rows." + "No SPI-synthetic non-capital-gains row may carry zero weight: the " + "SPI stage gives the stacked donors their prior mass before " + "calibration, and the national seam's calibrated control of " + "2026-10-28 (4374e0bf) ships none at zero." ), ), UKZeroWeightStratumDeclaration( - name="june_spi_synthetic_capital_gains", + name="spi_synthetic_capital_gains", selector={_SPI_FLAG: True, _CAPITAL_GAINS_FLAG: True}, - maximum_zero_weight_rows=100_000, + maximum_zero_weight_rows=0, reason=( - "The certified June FRS-derived artifact ships 100,000 zero-weight " - "SPI-synthetic capital-gains-clone rows." + "No SPI-synthetic capital-gains-clone row may carry zero weight: the " + "SPI stage gives the stacked donors their prior mass before " + "calibration, and the national seam's calibrated control of " + "2026-10-28 (4374e0bf) ships none at zero." ), ), ) @@ -372,8 +381,9 @@ def __post_init__(self) -> None: # the SPI channel's hmrc_spi_* leaves (#717), the FRS education and # housing fields, the two raw FRS codes the spine fences # (ossben_identifiable_subset, srp_regular_code5) and - # other_investment_income. Only incapacity_benefit_reported is dropped - # (UK_REVIEWED_EXPORT_EXCLUSIONS). + # other_investment_income. Only incapacity_benefit_reported, an all-zero + # layer the pinned reference leaves off its surface, is dropped + # (national_frame.UK_RELEASE_EXPORT_DROPPED_COLUMNS). "benunit.benunit_source_id", "benunit.benunit_support_channel", "benunit.benunit_support_clone_index", @@ -460,10 +470,6 @@ def __post_init__(self) -> None: ) UK_REVIEWED_EXPORT_EXCLUSIONS: Mapping[str, str] = { - "person.incapacity_benefit_reported": ( - "The enhanced FRS stores this legacy reported-benefit input as an " - "all-zero layer; the candidate must drop dead zero layers." - ), "household.property_wealth": ( "policyengine-uk derives property_wealth from main_residence_value, " "other_residential_property_value and non_residential_property_value; " diff --git a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py index efee43d9a7..aa9731954f 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py @@ -1698,7 +1698,7 @@ def test_thresholds_match_the_schema4_manifest(self, manifest) -> None: assert energy_rake["convergence_window_sweeps"] == 10 assert energy_rake["maximum_residual_change_over_window"] == 0.001 - def test_zero_weight_declarations_match_the_june_strata(self, manifest) -> None: + def test_zero_weight_declarations_match_the_reviewed_strata(self, manifest) -> None: params = {gate.id: gate.parameters for gate in manifest.gates} declared = params["uk_zero_weight_strata"]["declarations"] strata = terminal_gates.UK_DEFAULT_ZERO_WEIGHT_STRATA diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py index 7d8a25dfb7..8c0694a65d 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py @@ -181,10 +181,20 @@ def test_missing_zero_weight_selector_columns_fail_even_with_positive_weights() assert "selector column(s) are missing" in gate.failures[0] -def test_default_declarations_name_both_june_100k_zero_strata() -> None: +def test_default_declarations_cap_both_spi_synthetic_strata_at_zero() -> None: + """No household may carry zero weight (microcosm#1095, re-declared from #688). + + The June caps of 100,000 counted the retired ten-clone grain; the national + seam ships no zero-weight row, so both strata are capped at 0 and keep + their selectors only to name a zero-weight row by stratum. + """ + assert [row.name for row in UK_DEFAULT_ZERO_WEIGHT_STRATA] == [ + "spi_synthetic_base", + "spi_synthetic_capital_gains", + ] assert [row.maximum_zero_weight_rows for row in UK_DEFAULT_ZERO_WEIGHT_STRATA] == [ - 100_000, - 100_000, + 0, + 0, ] assert [row.selector for row in UK_DEFAULT_ZERO_WEIGHT_STRATA] == [ { @@ -198,6 +208,20 @@ def test_default_declarations_name_both_june_100k_zero_strata() -> None: ] +def test_default_declarations_name_a_zero_weight_spi_row_by_stratum() -> None: + dataset = _dataset(weights=[1.0, 0.0, 1.0, 1.0]) + + gate = uk_zero_weight_strata_gate(dataset.household) + + assert not gate.passed + strata = {row["name"]: row for row in gate.details["declared_strata"]} + assert strata["spi_synthetic_base"]["zero_weight_rows"] == 1 + assert strata["spi_synthetic_capital_gains"]["zero_weight_rows"] == 0 + assert gate.details["unmatched_zero_weight_rows"] == 0 + assert "spi_synthetic_base" in gate.failures[0] + assert "exceed the declared maximum" in gate.failures[0] + + def test_ess_collapse_produces_named_finding() -> None: weights = np.ones(200, dtype=float) weights[0] = 10_000.0 @@ -449,8 +473,12 @@ def test_export_candidate_columns_strip_ids_and_carry_the_weight() -> None: for entity, columns in UK_RELEASE_EXPORT_DROPPED_COLUMNS.items() for column in columns } + # The all-zero incapacity layer left the reviewed exclusions, which never + # matched the pinned reference (microcosm#1095); the boundary still drops it. + assert "person.incapacity_benefit_reported" not in UK_REVIEWED_EXPORT_EXCLUSIONS assert dropped == ( set(UK_REVIEWED_EXPORT_EXCLUSIONS) + | {"person.incapacity_benefit_reported"} | {f"person.{column}" for column in UK_INTERNAL_DISABILITY_REPORTED_COLUMNS} | {f"person.{SALSAC_PRE_CONVERSION_PAY_COLUMN}"} | {f"person.{FRS_LANDLORD_CARRIER_COLUMN}"} diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 8a464af204..24d9ba44a3 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -451,13 +451,13 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "43bde66ba8d7a122722e57331e631389750bba670ea9fb6d1612740443012179" + "44fe7b1ac4660db546e8b26c8430d22b6833463de5657d4de8ea9f6deecc31c1" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f20d0a20fe12392586b27ce97a7643e1862d7f6e6da9fe925bf17a4171657bbb" + "0284b3a472b8beabc2c8c1912993dd6c7662373171dbd2ab79ee4658d1fdc258" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "e62b50adbc02fd238b800105c2a513cb3514b580afdcdf2783f31189d3ee3e37" + "f73eede7066bf1a01c06a3bd3aca93709a3bf424053715e2ec33c358a88a7293" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -790,9 +790,9 @@ def dataset_role_for_line(line: str) -> str: _UK_DENSE_RELEASE_BLOCKING_IDS = _UK_DENSE_GATE_ENTRY_IDS _UK_DENSE_GATE_PHASES = ("terminal",) _UK_DENSE_GATE_DIGESTS = { - "gates_manifest_sha256": "c15b8de06a90598732c03091ee942dfa8a4eb9e41dc1e9ea3f2bd7986e3e7e99", + "gates_manifest_sha256": "e5bc33678ce84ed255ba118016f99fb61e5260e00347aa78f616bf53d04de309", "policy_sha256": "7b97d72a15756b983ecf32a7b4155e0558533044408eb02e6a2d8be52ebe55d4", - "spec_fingerprint": "cc56158ad88d9c92d4b98392a9e6eb7199b69458fbf0abbe7c9e5648c4bb6ed5", + "spec_fingerprint": "b4d77cdd8c75dcb67e3533040f82273944e45432d9605595cdb14bf58658c955", } _UK_DENSE_SOURCE_COVERAGE_KEYS = ( "spine", @@ -955,7 +955,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "f84d12b15441e66cbfdb6b6a5a0109fe1fdde8474675fb0f6aafae011a127ac0" + "8e3f82d12cd55031b4c29b55676287f1778453befc46abefff392ef12beb6065" ), "policy_sha256": ( "09046812edfa6538e9489f0a462992d74352af9b5d1d6fc9b26a2c5d112633c9" @@ -963,18 +963,18 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: }, "calibration_seam": { "gates_manifest_sha256": ( - "c398c52e908a4145afbb5967c284e575b226025473d2196a494bc00c280d7ecb" + "99bae00d3eb7cf2a55057e381298c24b00b403783353018e4e9f8420103475fc" ), "policy_sha256": ( - "98b174b57459d1f3a553e9a15efc8a47aaf322470207a448224c1c61bd19b621" + "40faef54f76298c32f541603d1ef768cde412d6295ceaa4c67c0b01445f36144" ), }, "release_cut": { "gates_manifest_sha256": ( - "d9996429aa272a6abfcc6c88d8eeea6bba99d23883e78dc4ce16c4432c8cb753" + "32ed07b6092409c3ec91240926be4d8a7262f4b26076d6ba62021d8c0f2ee520" ), "policy_sha256": ( - "53d5d9a14a6d118f9fbfd960a06d6e67e54f88c35718e131ce382394abe3209d" + "44d6e0fc2a8fb78cb358969b4a471cb15274371e31b6234ddd29e6979b43cc00" ), }, } diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index 7c2b058082..c2fefbe81e 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -213,13 +213,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "43bde66ba8d7a122722e57331e631389750bba670ea9fb6d1612740443012179" + "44fe7b1ac4660db546e8b26c8430d22b6833463de5657d4de8ea9f6deecc31c1" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f20d0a20fe12392586b27ce97a7643e1862d7f6e6da9fe925bf17a4171657bbb" + "0284b3a472b8beabc2c8c1912993dd6c7662373171dbd2ab79ee4658d1fdc258" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "e62b50adbc02fd238b800105c2a513cb3514b580afdcdf2783f31189d3ee3e37" + "f73eede7066bf1a01c06a3bd3aca93709a3bf424053715e2ec33c358a88a7293" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" From 610a1bce706f90d2d500831a2de4c6378a7e9af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:18:04 +0000 Subject: [PATCH 15/39] Carry each stage's rewrites in the graph build's stage records too d2a1f9cd4 gave StageRecord its rewrote field and read the spine's final nonzero-share list from every record's outputs and rewrites, but only the legacy plan path filled it. The graph build, the production path, projects its records from node artifacts and left rewrote empty, so its records dropped the rewrite provenance microcosm#721 asks for, and test_driver_writes_spine_h5_sidecars_and_logbook lost education_grants from the final list (the real roster still lists it through frs_spine's outputs). A declared rewrite is an owned cell of its node, as an output is, so the graph projection now reads its share from the node's artifact and records the stage's declared rewrites. Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/uk_runtime/spine_build.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py index 33301bdd7e..1a3a171bb6 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/spine_build.py @@ -975,7 +975,9 @@ def _graph_stage_records( ) output_receipt = manifest.nodes[output_node] shares: dict[str, float] = {} - for column in stage.outputs: + # A declared rewrite is an owned cell of its node, as an output is, so + # its share reads the node's artifact too (microcosm#721). + for column in (*stage.outputs, *stage.rewrites): matches = [ (coordinate, key) for coordinate, key in output_receipt.artifacts.items() @@ -987,7 +989,8 @@ def _graph_stage_records( if len(matches) != 1: raise RuntimeError( f"graph stage {stage.stage!r} exposes {len(matches)} artifacts " - f"for declared output {column!r}." + f"for declared {'rewrite' if column in stage.rewrites else 'output'} " + f"{column!r}." ) shares[column] = _series_nonzero_share(store.load_column(matches[0][1])) execution_node = "create_uk_frs" if stage.stage == "frs_spine" else stage.stage @@ -995,6 +998,7 @@ def _graph_stage_records( StageRecord( stage=stage.stage, produced=stage.outputs, + rewrote=stage.rewrites, donor_survey=stage.survey, nonzero_share=shares, seconds=manifest.nodes[execution_node].wall_time, From 6177c5cccba0adb3662b7e6af20339d3c650b05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:20:44 +0000 Subject: [PATCH 16/39] Check the take-up flags where they are drawn, before calibration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit María's ruling of 2026-10-29 on microcosm#1095 ("do both"): keep the terminal uk_take_up_signal gate release-blocking on the calibrated shares, and check the same flags at stage time. - The twelve flags the terminal gate measures are drawn by three stages before the assembled boundary: frs_take_up (the four childcare flags, the UC childcare element and the under-2 usage), frs_person_draws (Marriage Allowance, Scottish Child Payment) and frs_household_draws (TV ownership, licence evasion, the first-home and purchase flags). take_up_signal_outputs selects each stage's flags, and a test holds the three sets to a partition of the terminal gate's. - The terminal gate's per-flag measurement moves into _measure_take_up_signal, unchanged, so that uk_take_up_signal_receipt measures the same thing at the stage's weights. The receipt is aggregate-only: support is a band of distinct source households, and a share or target resting on fewer than ten is withheld. - Each stage records the receipt in its checkpoint evidence, and the graph hashes frs_take_up and receipt_counts with the two draw stages. - stage_health gains a take_up_signal check: the receipt must carry exactly the declared outputs; each must vary, sit within the declared bound of its target, and keep the universal hours nested; a withheld share fails, as it cannot be measured. - gates.json declares uk_stage_frs_take_up_signal, uk_stage_frs_person_draws_take_up_signal and uk_stage_frs_household_draws_take_up_signal (assembled, release-blocking, evidence_absent_blocks, population_fact_check) at the terminal gate's bounds, 0.05 and 0.10 for the under-2 usage, until a spine build's receipt measures the stage-time deviations. The spine scope, the data contract's entry, evidence and spine-part mirrors and the battery, spine and release-cut digests follow. Co-Authored-By: Claude Opus 5.5 --- ...095-uk-take-up-stage-signal-gates.added.md | 1 + .../src/microcosm/build/uk/gates.json | 63 ++++- .../build/uk_runtime/battery_bindings.py | 5 + .../build/uk_runtime/calibration_run.py | 5 + .../build/uk_runtime/frs_household_draws.py | 32 ++- .../build/uk_runtime/frs_person_draws.py | 19 +- .../microcosm/build/uk_runtime/frs_take_up.py | 253 ++++++++++++++---- .../build/uk_runtime/graph_kernels.py | 6 + .../build/uk_runtime/stage_health.py | 102 +++++++ .../engine_free/shared/test_country_spec.py | 6 + .../engine_free/uk/test_uk_frs_stochastic.py | 12 + .../engine_free/uk/test_uk_take_up_gate.py | 156 +++++++++++ .../src/microcosm/data/contract.py | 21 +- .../tests/engine_free/shared/test_contract.py | 24 +- 14 files changed, 642 insertions(+), 63 deletions(-) create mode 100644 changelog.d/1095-uk-take-up-stage-signal-gates.added.md diff --git a/changelog.d/1095-uk-take-up-stage-signal-gates.added.md b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md new file mode 100644 index 0000000000..4597811d88 --- /dev/null +++ b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md @@ -0,0 +1 @@ +The twelve take-up flags the terminal uk_take_up_signal gate measures are checked at their drawing stages too: frs_take_up, frs_person_draws and frs_household_draws each record the drawn flags' shares at the stage's weights, and three assembled-phase stage-health gates hold them to their contract targets within the terminal gate's bounds, so a draw defect fails at its stage apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index c4f571a1f2..456ec4a18d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -916,6 +916,67 @@ }, "notes": "Stage-time gate over the is_apprentice receipt (microcosm#1373). The draw's target is the contract's apprentice_stock_19_to_24 for the build year (DfE's England apprentices in learning at the start of the academic year, participation less starts, per head aged 19 to 24) times the weighted population aged 21 to 24 at the stage's weights, and eligible employees aged 21 to 24 are flagged in the order of their identity-keyed uniform until their weight is nearest it, so the stage misses it by at most half one person's weight. The gate checks that the receipt carries the contract's rate under the declared key, that its target is that rate times its population, that its support is printed in bands, and, unless the eligible employees weigh no more than the target (cap-bound, every one of them flagged), that the flagged weight lies within maximum_relative_realization_deviation (5 percent) of the target. That tolerance is a declared rule set above the half-weight bound, not a fact. A figure resting on fewer than ten source households, which the receipt withholds under the UKDS disclosure rule and prints \"<10\", is named unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). The receipt also records the relief the flags imply at the installed engine's own Class 1 schedule for the build year (on a 2024 frame, 13.8 percent between GBP 9,100 and GBP 50,270), with each flagged employee's pay standing in for NIC earnings, and the gate holds it at or below maximum_implied_relief: GBP 370m, HMRC's NIC - NS1 for 2024-25 (tax relief statistics, January 2026, Table 2), which covers every apprentice under 25, under-21s included, since the apprentice relief takes precedence (Vahid's review of microcosm#1373, S1). It is a ceiling, not a target. The stage refuses an installed engine without the s.9B threshold or without policyengine-uk#2683's split of the apprentice minimum wage from the flag. The entry is a population_fact_check, so the synthetic smoke build over the H2 fixture records its outcome without blocking; every licensed build blocks on it." }, + { + "id": "uk_stage_frs_take_up_signal", + "gate": "stage_health", + "phase": "assembled", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "frs_take_up", + "check": "take_up_signal", + "maximum_share_deviation": 0.05, + "under_two_usage_maximum_share_deviation": 0.1, + "outputs": [ + "benunit.would_claim_tfc", + "benunit.would_claim_extended_childcare", + "benunit.would_claim_universal_childcare", + "benunit.would_claim_targeted_childcare", + "benunit.would_claim_uc_childcare", + "person.max_free_entitlement_hours_used" + ] + }, + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the six flags frs_take_up draws that the terminal uk_take_up_signal gate measures (Tax-Free Childcare, the extended, universal and targeted hours, the Universal Credit childcare element and the under-2 usage of the extended hours) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage, whose population is the children under 2 in units that claim the extended hours), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + }, + { + "id": "uk_stage_frs_person_draws_take_up_signal", + "gate": "stage_health", + "phase": "assembled", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "frs_person_draws", + "check": "take_up_signal", + "maximum_share_deviation": 0.05, + "outputs": [ + "person.would_claim_marriage_allowance", + "person.would_claim_scp" + ] + }, + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the Marriage Allowance and Scottish Child Payment flags frs_person_draws draws are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; the Scottish Child Payment target is the weighted mean of its under-6 and 6-plus rates). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + }, + { + "id": "uk_stage_frs_household_draws_take_up_signal", + "gate": "stage_health", + "phase": "assembled", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "frs_household_draws", + "check": "take_up_signal", + "maximum_share_deviation": 0.05, + "outputs": [ + "household.household_owns_tv", + "household.would_evade_tv_licence_fee", + "household.main_residential_property_purchased_is_first_home", + "household.property_purchased" + ] + }, + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the four flags frs_household_draws draws (TV ownership, TV licence evasion, the first-home flag and the main-residence purchase flag) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + }, { "id": "uk_release_input_coverage", "gate": "release_input_coverage", @@ -1336,7 +1397,7 @@ "maximum_share_deviation": 0.05, "under_two_usage_maximum_share_deviation": 0.1 }, - "notes": "Every contract-driven stochastic flag must be non-constant and have a weighted share within +/-0.05 of its contract target. would_claim_pc is measured by uk_stage_pension_credit_take_up instead (microcosm#1069 R9), would_claim_child_benefit and child_benefit_opts_out by uk_stage_child_benefit_take_up (microcosm#1063), and would_claim_uc by uk_stage_uc_take_up (microcosm#1334): frs_take_up and spi_benefit_coherence draw it at the contract rate, and uc_take_up redraws every entitled unit by award band and family type. would_claim_universal_childcare is nested under would_claim_extended_childcare, so its target is the nested marginal r_e + (1 - r_e) * r_u of the contract's conditional universal rate, and the gate fails on any benefit unit that claims the extended hours without the universal ones. max_free_entitlement_hours_used carries the under-2 usage draw: its share of persons with hours is measured over the children of DfE age 0 or 1 in units that claim the extended hours, against the weighted mean of their ages' contract rates (extended_childcare_age_0_usage, extended_childcare_age_1_usage), within +/-0.10: the DfE working-parent row at 9 to 11 months binds a thin cell of that draw's children, so the calibrated weights move the share from its rates where the spine's own weights hold it to them (ruling of 2026-10-25); tools/report_uk_childcare_realised_take_up.py records the share a file realises." + "notes": "Every contract-driven stochastic flag must be non-constant and have a weighted share within +/-0.05 of its contract target. would_claim_pc is measured by uk_stage_pension_credit_take_up instead (microcosm#1069 R9), would_claim_child_benefit and child_benefit_opts_out by uk_stage_child_benefit_take_up (microcosm#1063), and would_claim_uc by uk_stage_uc_take_up (microcosm#1334): frs_take_up and spi_benefit_coherence draw it at the contract rate, and uc_take_up redraws every entitled unit by award band and family type. would_claim_universal_childcare is nested under would_claim_extended_childcare, so its target is the nested marginal r_e + (1 - r_e) * r_u of the contract's conditional universal rate, and the gate fails on any benefit unit that claims the extended hours without the universal ones. max_free_entitlement_hours_used carries the under-2 usage draw: its share of persons with hours is measured over the children of DfE age 0 or 1 in units that claim the extended hours, against the weighted mean of their ages' contract rates (extended_childcare_age_0_usage, extended_childcare_age_1_usage), within +/-0.10: the DfE working-parent row at 9 to 11 months binds a thin cell of that draw's children, so the calibrated weights move the share from its rates where the spine's own weights hold it to them (ruling of 2026-10-25); tools/report_uk_childcare_realised_take_up.py records the share a file realises. María's ruling of 2026-10-29 (microcosm#1095) keeps this gate release-blocking on the calibrated shares and checks the same flags at their drawing stages too (uk_stage_frs_take_up_signal, uk_stage_frs_person_draws_take_up_signal and uk_stage_frs_household_draws_take_up_signal), at the stages' weights before calibration, so a draw defect fails at its stage apart from calibration's drift." }, { "id": "uk_brma_enum_domain", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py index f56ad3e5dd..e1c8181bb0 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py @@ -2102,6 +2102,11 @@ def _ledger_compile_parity_required_artifacts( "minimum_age_child_rows", "maximum_opt_out_share_deviation", "minimum_eligible_family_units", + # microcosm#1095 take_up_signal stage-health check (María's + # ruling of 2026-10-29: the flags at their drawing stages). + "maximum_share_deviation", + "under_two_usage_maximum_share_deviation", + "outputs", "absolute_tolerance", "household_weight_kind", "minimum_spi_households", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py index fb63b123e3..4fd369dcdd 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py @@ -139,6 +139,11 @@ "uk_stage_property_purchases_fit", "uk_stage_uc_legacy_closure_take_up_contract", "uk_stage_frs_person_draws_apprentices", + # The take-up flags at their drawing stages, before calibration (María's + # ruling of 2026-10-29, microcosm#1095). + "uk_stage_frs_take_up_signal", + "uk_stage_frs_person_draws_take_up_signal", + "uk_stage_frs_household_draws_take_up_signal", # Weight-independent like the BRMA enum below, and its column exists from # frs_relationships onward (#791). "uk_ons_household_type_enum_domain", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_household_draws.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_household_draws.py index a93a61cae0..e9c84cff65 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_household_draws.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_household_draws.py @@ -2,7 +2,8 @@ from __future__ import annotations -from dataclasses import dataclass +from collections.abc import Mapping +from dataclasses import dataclass, field import numpy as np import pandas as pd @@ -12,6 +13,10 @@ assign_binary_from_rate, stable_identity_uniforms, ) +from microcosm.build.uk_runtime.frs_take_up import ( + take_up_signal_outputs, + uk_take_up_signal_receipt, +) from microcosm.build.uk_runtime.national_frame import ( uk_household_weight_kind, uk_national_frame, @@ -38,14 +43,37 @@ class UKFRSHouseholdDrawsStageTransform: contract: UKTakeUpContract stage: SourceStageSpec + last_receipt: Mapping[str, object] | None = field(default=None, init=False) def __call__(self, frame: Frame) -> Frame: - return add_frs_household_draws(frame, contract=self.contract) + result = add_frs_household_draws(frame, contract=self.contract) + # The four flags at the stage's weights, for the stage-time take-up + # signal gate (microcosm#1095). + object.__setattr__( + self, + "last_receipt", + uk_take_up_signal_receipt( + result, + outputs=take_up_signal_outputs(FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS), + contract=self.contract, + ), + ) + return result @staticmethod def output_columns() -> tuple[str, ...]: return FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS + def checkpoint_metadata(self) -> dict[str, object]: + if self.last_receipt is None: + raise RuntimeError("checkpoint metadata requires a completed stage run.") + return { + "evidence": { + "stage": "frs_household_draws", + "take_up_signal": dict(self.last_receipt), + } + } + def add_frs_household_draws(frame: Frame, *, contract: UKTakeUpContract) -> Frame: household = frame.table("household").copy() diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py index 4aa6737b1b..4a499fd0aa 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py @@ -45,6 +45,10 @@ stable_identity_uniforms, ) from microcosm.build.uk_runtime.frs_employment import FRS_EMPSTATI_EMPLOYMENT_STATUS +from microcosm.build.uk_runtime.frs_take_up import ( + take_up_signal_outputs, + uk_take_up_signal_receipt, +) from microcosm.build.uk_runtime.national_frame import ( uk_household_weight_kind, uk_national_frame, @@ -101,12 +105,24 @@ class UKFRSPersonDrawsStageTransform: contract: UKTakeUpContract stage: SourceStageSpec last_receipt: Mapping[str, object] | None = field(default=None, init=False) + last_signal_receipt: Mapping[str, object] | None = field(default=None, init=False) def __call__(self, frame: Frame) -> Frame: result, receipt = add_frs_person_draws_with_receipt( frame, contract=self.contract ) object.__setattr__(self, "last_receipt", receipt) + # The Marriage Allowance and Scottish Child Payment flags at the stage's + # weights, for the stage-time take-up signal gate (microcosm#1095). + object.__setattr__( + self, + "last_signal_receipt", + uk_take_up_signal_receipt( + result, + outputs=take_up_signal_outputs(FRS_PERSON_DRAW_OUTPUT_COLUMNS), + contract=self.contract, + ), + ) return result @staticmethod @@ -114,12 +130,13 @@ def output_columns() -> tuple[str, ...]: return FRS_PERSON_DRAW_OUTPUT_COLUMNS def checkpoint_metadata(self) -> dict[str, object]: - if self.last_receipt is None: + if self.last_receipt is None or self.last_signal_receipt is None: raise RuntimeError("checkpoint metadata requires a completed stage run.") return { "evidence": { "stage": "frs_person_draws", "apprentice_receipt": dict(self.last_receipt), + "take_up_signal": dict(self.last_signal_receipt), } } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py index f1f8d226c8..228132fbab 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py @@ -2,7 +2,8 @@ from __future__ import annotations -from dataclasses import dataclass +from collections.abc import Iterable, Mapping +from dataclasses import dataclass, field from importlib import metadata from pathlib import Path @@ -24,6 +25,12 @@ uk_time_period, validate_uk_national_frame, ) +from microcosm.build.uk_runtime.receipt_counts import ( + distinct_count, + extreme_count, + small_cell_share, + support_band, +) from microcosm.build.uk_runtime.take_up_contract import ( UKTakeUpContract, load_uk_take_up_contract, @@ -172,6 +179,20 @@ ) +def take_up_signal_outputs(columns: Iterable[str]) -> tuple[tuple[str, str, str], ...]: + """The signal gate's flags among a stage's outputs, in the gate's order. + + Each flag is checked again where it is drawn, at the stage's weights before + calibration (María's ruling of 2026-10-29, microcosm#1095): ``frs_take_up`` + draws the childcare flags and the under-2 usage, ``frs_person_draws`` the + Marriage Allowance and Scottish Child Payment flags, and + ``frs_household_draws`` the TV and property flags. + """ + + names = set(columns) + return tuple(row for row in UK_TAKE_UP_SIGNAL_OUTPUTS if row[1] in names) + + @dataclass(frozen=True) class UKTakeUpPopulationPolicy: """Engine bounds of the Universal Credit take-up population at one instant. @@ -326,6 +347,7 @@ class UKFRSTakeUpStageTransform: contract: UKTakeUpContract stage: SourceStageSpec population_policy: UKTakeUpPopulationPolicy | None = None + last_receipt: Mapping[str, object] | None = field(default=None, init=False) def __call__(self, frame: Frame) -> Frame: assert_take_up_stage_population_declaration(self.stage) @@ -334,12 +356,34 @@ def __call__(self, frame: Frame) -> Frame: policy = self.population_policy or uk_take_up_population_policy( uk_time_period(frame) ) - return add_frs_take_up(frame, contract=self.contract, population_policy=policy) + result = add_frs_take_up( + frame, contract=self.contract, population_policy=policy + ) + object.__setattr__( + self, + "last_receipt", + uk_take_up_signal_receipt( + result, + outputs=take_up_signal_outputs(self.output_columns()), + contract=self.contract, + ), + ) + return result @staticmethod def output_columns() -> tuple[str, ...]: return (*FRS_TAKE_UP_OUTPUT_COLUMNS, *FRS_TAKE_UP_PERSON_OUTPUT_COLUMNS) + def checkpoint_metadata(self) -> dict[str, object]: + if self.last_receipt is None: + raise RuntimeError("checkpoint metadata requires a completed stage run.") + return { + "evidence": { + "stage": "frs_take_up", + "take_up_signal": dict(self.last_receipt), + } + } + def add_frs_take_up( frame: Frame, @@ -631,42 +675,11 @@ def uk_take_up_signal_gate( failures: list[str] = [] details: dict[str, object] = {} for entity, output, key in UK_TAKE_UP_SIGNAL_OUTPUTS: - table = frame.table(entity) - if output not in table.columns: - failures.append(f"{entity}.{output}: missing stochastic column.") - continue - values = np.asarray(table[output], dtype=bool) - unique_count = int(pd.Series(values).nunique(dropna=False)) - weights = np.asarray(frame.resolve_weights(entity).values, dtype=np.float64) - population = np.ones(values.shape, dtype=bool) - if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY: - # The rate is a share of the children under 2 in units that claim - # the working-parent hours; every other person keeps 30 hours. - benunit_table = frame.table("benunit") - population = under_two_children(table) & person_unit_flag( - table, - benunit_table, - benunit_table[UK_EXTENDED_CHILDCARE_OUTPUT].to_numpy(), - ) - if not population.any() or float(weights[population].sum()) <= 0.0: - failures.append( - f"{entity}.{output}: no unit in the draw's population carries " - "weight; the take-up share cannot be measured." - ) + measured = _measure_take_up_signal(frame, entity, output, key, resolved) + if isinstance(measured, str): + failures.append(f"{entity}.{output}: {measured}") continue - share = float( - np.average(values[population].astype(float), weights=weights[population]) - ) - if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY: - # Each child's rate is its age's: the target is their weighted mean. - target = float( - np.average( - under_two_usage_rates(table, resolved)[population], - weights=weights[population], - ) - ) - else: - target = _target_share(table, key, resolved, weights) + share, target = measured.share, measured.target bound = ( under_two_usage_maximum_share_deviation if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY @@ -678,19 +691,11 @@ def uk_take_up_signal_gate( "target": target, "absolute_deviation": abs(share - target), "maximum_share_deviation": bound, - "unique_count": unique_count, - "population_units": int(population.sum()), + "unique_count": measured.unique_count, + "population_units": int(measured.population.sum()), } - if ( - output == UK_UNIVERSAL_CHILDCARE_OUTPUT - and UK_UNIVERSAL_CHILDCARE_NESTED_UNDER in table.columns - ): - # Nested draw: P(universal | extended) = 1, so no benefit unit - # claims the extended hours without the universal ones. - extended = np.asarray( - table[UK_UNIVERSAL_CHILDCARE_NESTED_UNDER], dtype=bool - ) - violations = int((extended & ~values).sum()) + if measured.nested_violations is not None: + violations = measured.nested_violations details[f"{entity}.{output}"]["extended_without_universal_units"] = ( violations ) @@ -700,7 +705,7 @@ def uk_take_up_signal_gate( "extended hours without the universal hours; the universal " "flag is nested under would_claim_extended_childcare." ) - if unique_count < 2: + if measured.unique_count < 2: failures.append( f"{entity}.{output}: constant column; stochastic take-up " "assignment must not collapse to a universal default." @@ -718,6 +723,154 @@ def uk_take_up_signal_gate( ) +@dataclass(frozen=True) +class _TakeUpSignal: + """One flag's weighted share over its draw's population.""" + + share: float + target: float + unique_count: int + population: np.ndarray + weights: np.ndarray + nested_violations: int | None + + +def _measure_take_up_signal( + frame: Frame, + entity: str, + output: str, + key: str, + contract: UKTakeUpContract, +) -> _TakeUpSignal | str: + """One flag's share at the frame's weights, or why it cannot be measured.""" + + table = frame.table(entity) + if output not in table.columns: + return "missing stochastic column." + values = np.asarray(table[output], dtype=bool) + unique_count = int(pd.Series(values).nunique(dropna=False)) + weights = np.asarray(frame.resolve_weights(entity).values, dtype=np.float64) + population = np.ones(values.shape, dtype=bool) + if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY: + # The rate is a share of the children under 2 in units that claim + # the working-parent hours; every other person keeps 30 hours. + benunit_table = frame.table("benunit") + population = under_two_children(table) & person_unit_flag( + table, + benunit_table, + benunit_table[UK_EXTENDED_CHILDCARE_OUTPUT].to_numpy(), + ) + if not population.any() or float(weights[population].sum()) <= 0.0: + return ( + "no unit in the draw's population carries weight; the take-up " + "share cannot be measured." + ) + share = float( + np.average(values[population].astype(float), weights=weights[population]) + ) + if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY: + # Each child's rate is its age's: the target is their weighted mean. + target = float( + np.average( + under_two_usage_rates(table, contract)[population], + weights=weights[population], + ) + ) + else: + target = _target_share(table, key, contract, weights) + nested = None + if ( + output == UK_UNIVERSAL_CHILDCARE_OUTPUT + and UK_UNIVERSAL_CHILDCARE_NESTED_UNDER in table.columns + ): + # Nested draw: P(universal | extended) = 1, so no benefit unit + # claims the extended hours without the universal ones. + extended = np.asarray(table[UK_UNIVERSAL_CHILDCARE_NESTED_UNDER], dtype=bool) + nested = int((extended & ~values).sum()) + return _TakeUpSignal( + share=share, + target=target, + unique_count=unique_count, + population=population, + weights=weights, + nested_violations=nested, + ) + + +def uk_take_up_signal_receipt( + frame: Frame, + *, + outputs: Iterable[tuple[str, str, str]], + contract: UKTakeUpContract, +) -> dict[str, object]: + """The drawn flags' shares at the stage's weights, for its stage gate. + + The terminal ``uk_take_up_signal`` gate measures the same flags at the + calibrated weights; a stage gate reads this receipt so that a draw defect + fails where it is drawn, apart from calibration's drift (María's ruling of + 2026-10-29, microcosm#1095). The receipt is aggregate-only (UKDS disclosure + control): a share or a target is given only where ten or more source + households carry the flag's population, whose support is a band. + """ + + sources: dict[str, np.ndarray] = {} + flags: list[dict[str, object]] = [] + for entity, output, key in outputs: + row: dict[str, object] = {"output": f"{entity}.{output}", "rate_key": key} + if key == UK_UNDER_TWO_USAGE_SIGNAL_KEY: + row["under_two_usage"] = True + measured = _measure_take_up_signal(frame, entity, output, key, contract) + if isinstance(measured, str): + row["unmeasured"] = measured + flags.append(row) + continue + if entity not in sources: + sources[entity] = _row_source_households(frame, entity) + support = distinct_count(sources[entity], measured.population, measured.weights) + row["population_support"] = support_band(support) + row["target"] = small_cell_share(measured.target, support) + row["weighted_share"] = small_cell_share(measured.share, support) + row["distinct_values"] = measured.unique_count + if measured.nested_violations is not None: + row["extended_without_universal_units"] = extreme_count( + measured.nested_violations + ) + flags.append(row) + return { + "weights": "household weights at the stage, before calibration", + "flags": flags, + } + + +def _row_source_households(frame: Frame, entity: str) -> np.ndarray: + """Each row's source household, the key a receipt counts support by. + + Before the SPI support channel each household row is its own FRS source + household, so its id serves until ``household_source_id`` exists. + """ + + household = frame.table("household") + column = ( + "household_source_id" + if "household_source_id" in household.columns + else "household_id" + ) + by_household = pd.Series( + household[column].to_numpy(), index=household["household_id"].to_numpy() + ) + if entity == "household": + return by_household.to_numpy() + person = frame.table("person") + person_sources = person["person_household_id"].map(by_household) + if entity == "person": + return person_sources.to_numpy() + by_benunit = pd.Series( + person_sources.to_numpy(), index=person["person_benunit_id"].to_numpy() + ) + by_benunit = by_benunit[~by_benunit.index.duplicated()] + return frame.table("benunit")["benunit_id"].map(by_benunit).to_numpy() + + def _target_share( table: pd.DataFrame, key: str, diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py index c7ca55964b..6c5a92ec42 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py @@ -137,6 +137,12 @@ # Imported modules are not traversed by ``source_hash``. Bind relationship # helpers and the adapter's input-retention checks into every consuming stage. _STAGE_HELPER_MODULES = { + # The three FRS draw stages' receipts measure their take-up flags through + # frs_take_up's signal measurement and count support by the shared + # disclosure rules (microcosm#1095). + "frs_take_up": (receipt_counts,), + "frs_person_draws": (frs_take_up, receipt_counts), + "frs_household_draws": (frs_take_up, receipt_counts), "frs_hmrc_spine_leaves": (frs_hmrc_source,), # The annual income descriptors' receipt follows the shared disclosure rules # (microcosm#1164). diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index 717448a6df..90122f9527 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -51,6 +51,8 @@ def uk_stage_health_gate( return _uc_take_up_gate(stage, evidence, parameters) if check == "child_benefit_take_up": return _child_benefit_take_up_gate(stage, evidence, parameters) + if check == "take_up_signal": + return _take_up_signal_gate(stage, evidence, parameters) if check == "spi_benefit_coherence": return _spi_benefit_coherence_gate(stage, evidence, parameters) if check == "source_signal": @@ -1086,6 +1088,106 @@ def _child_benefit_take_up_gate( ) +def _take_up_signal_gate( + stage: str, + evidence: Mapping[str, object], + parameters: Mapping[str, object], +) -> GateResult: + """The stage's drawn take-up flags near their contract targets. + + María's ruling of 2026-10-29 (microcosm#1095): the flags the terminal + ``uk_take_up_signal`` gate measures at the calibrated weights are checked + where they are drawn too, at the stage's weights before calibration, so a + draw defect fails at its stage apart from calibration's drift. The receipt + must carry exactly the declared ``outputs``; each must vary, sit within the + declared share deviation of its target (the under-2 usage row within its + own bound) and, for the nested universal hours, have no benefit unit that + claims the extended hours without them. A share the receipt withholds + under the disclosure floor cannot be measured, so it fails. + """ + + check = "take_up_signal" + bound = _finite_number( + parameters["maximum_share_deviation"], + label=f"{stage}.maximum_share_deviation", + ) + under_two = parameters.get("under_two_usage_maximum_share_deviation") + under_two_bound = ( + bound + if under_two is None + else _finite_number( + under_two, label=f"{stage}.under_two_usage_maximum_share_deviation" + ) + ) + declared = parameters.get("outputs") + if not isinstance(declared, list | tuple) or not declared: + raise ValueError(f"{stage}.outputs must list the stage's take-up flags.") + expected = [str(output) for output in declared] + failures: list[str] = [] + details: dict[str, object] = {} + receipt = _mapping(evidence.get("take_up_signal"), label=f"{stage}.take_up_signal") + rows = receipt.get("flags") + if not isinstance(rows, list): + failures.append(f"{stage}: the receipt carries no take-up flags.") + rows = [] + by_output: dict[str, Mapping[str, object]] = {} + for row in rows: + row = _mapping(row, label=f"{stage}.take_up_signal.flags[]") + by_output[str(row.get("output"))] = row + missing = sorted(set(expected) - set(by_output)) + undeclared = sorted(set(by_output) - set(expected)) + if missing: + failures.append(f"{stage}: the receipt omits the declared flags {missing}.") + if undeclared: + failures.append(f"{stage}: the receipt carries undeclared flags {undeclared}.") + for output in expected: + row = by_output.get(output) + if row is None: + continue + if "unmeasured" in row: + failures.append(f"{stage}: {output}: {row['unmeasured']}") + continue + share = row.get("weighted_share") + target = row.get("target") + if not isinstance(share, int | float) or not isinstance(target, int | float): + failures.append( + f"{stage}: {output}'s share or target is withheld ({share!r}, " + f"{target!r}): its population is too thin to measure at the stage." + ) + continue + share = _finite_number(share, label=f"{stage}.{output}.weighted_share") + target = _finite_number(target, label=f"{stage}.{output}.target") + limit = under_two_bound if row.get("under_two_usage") is True else bound + deviation = abs(share - target) + details[output] = { + "weighted_share": share, + "target": target, + "absolute_deviation": deviation, + "maximum_share_deviation": limit, + } + if int(row.get("distinct_values", 0)) < 2: + failures.append( + f"{stage}: {output} is constant; a stochastic take-up draw must " + "not collapse to a universal default." + ) + nested = row.get("extended_without_universal_units") + if nested is not None and nested != 0: + failures.append( + f"{stage}: {output}: {nested} benefit unit(s) claim the extended " + "hours without the universal hours." + ) + if deviation > limit: + failures.append( + f"{stage}: {output}'s weighted share {share:.4f} differs from its " + f"contract target {target:.4f} by more than {limit}." + ) + return ( + _fail(stage, check, failures, details) + if failures + else _pass(stage, check, details) + ) + + #: The structural counts the annual income receipt records, banded by #: ``receipt_counts.extreme_count`` with zero exact; each must be zero. _ANNUAL_INCOME_STRUCTURAL_ZEROS = ( diff --git a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py index aa9731954f..d467879327 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py @@ -1500,6 +1500,9 @@ def test_declares_the_full_june_battery(self, manifest) -> None: "uk_stage_property_purchases_fit", "uk_stage_uc_legacy_closure_take_up_contract", "uk_stage_frs_person_draws_apprentices", + "uk_stage_frs_take_up_signal", + "uk_stage_frs_person_draws_take_up_signal", + "uk_stage_frs_household_draws_take_up_signal", "uk_release_input_coverage", "uk_degenerate_release_surface", "uk_zero_weight_strata", @@ -1631,6 +1634,9 @@ def test_strict_absent_evidence_entries_are_declared(self, manifest) -> None: "uk_stage_property_purchases_fit", "uk_stage_uc_legacy_closure_take_up_contract", "uk_stage_frs_person_draws_apprentices", + "uk_stage_frs_take_up_signal", + "uk_stage_frs_person_draws_take_up_signal", + "uk_stage_frs_household_draws_take_up_signal", "uk_weights_audit", # The #970 projection fence: a seam that cannot project cannot # certify the candidate's sub-exempt gainers. diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py index 0b68f5f2e9..d7b7fbe595 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py @@ -113,6 +113,18 @@ def test_person_and_household_stage_families_are_deterministic() -> None: household_a[list(FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS)], household_b[list(FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS)], ) + # Each stage's receipt carries the take-up flags it draws, for its + # stage-time signal gate (microcosm#1095). + person_evidence = person_stage.checkpoint_metadata()["evidence"] + assert "apprentice_receipt" in person_evidence + assert [row["output"] for row in person_evidence["take_up_signal"]["flags"]] == [ + "person.would_claim_marriage_allowance", + "person.would_claim_scp", + ] + household_evidence = household_stage.checkpoint_metadata()["evidence"] + assert [row["output"] for row in household_evidence["take_up_signal"]["flags"]] == [ + f"household.{column}" for column in FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS + ] def test_brma_cell_membership_and_household_collapse() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py index e0abd8aa5e..2a64d30704 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py @@ -2,6 +2,7 @@ import numpy as np import pandas as pd +import pytest from microcosm.build.gate_battery import EvidenceContext from microcosm.build.uk_runtime.battery_bindings import UK_GATE_REGISTRY @@ -235,3 +236,158 @@ def test_take_up_gate_holds_under_two_usage_to_its_own_bound() -> None: own.details["household.property_purchased"]["maximum_share_deviation"] == 0.05 ) assert any("household.property_purchased" in failure for failure in own.failures) + + +# María's ruling of 2026-10-29 (microcosm#1095): every flag the terminal gate +# measures is checked at its drawing stage too, at the stage's weights. +_SIGNAL_STAGE_GATES = { + "frs_take_up": "uk_stage_frs_take_up_signal", + "frs_person_draws": "uk_stage_frs_person_draws_take_up_signal", + "frs_household_draws": "uk_stage_frs_household_draws_take_up_signal", +} + + +def _stage_signal_outputs() -> dict[str, tuple[tuple[str, str, str], ...]]: + from microcosm.build.uk_runtime.frs_person_draws import ( + FRS_PERSON_DRAW_OUTPUT_COLUMNS, + ) + from microcosm.build.uk_runtime.frs_take_up import ( + UKFRSTakeUpStageTransform, + take_up_signal_outputs, + ) + + return { + "frs_take_up": take_up_signal_outputs( + UKFRSTakeUpStageTransform.output_columns() + ), + "frs_person_draws": take_up_signal_outputs(FRS_PERSON_DRAW_OUTPUT_COLUMNS), + "frs_household_draws": take_up_signal_outputs( + FRS_HOUSEHOLD_DRAW_OUTPUT_COLUMNS + ), + } + + +def _stage_gate_parameters(stage: str) -> dict[str, object]: + from microcosm.build import load_country_spec + + entries = {entry.id: entry for entry in load_country_spec("uk").gates.gates} + entry = entries[_SIGNAL_STAGE_GATES[stage]] + assert entry.gate == "stage_health" + assert entry.phase == "assembled" + assert entry.criticality == "release_blocking" + assert entry.evidence_absent_blocks is True + return dict(entry.parameters) + + +def test_each_terminal_flag_is_checked_once_at_its_drawing_stage() -> None: + from microcosm.build.uk_runtime.frs_take_up import UK_TAKE_UP_SIGNAL_OUTPUTS + + by_stage = _stage_signal_outputs() + drawn = [row for rows in by_stage.values() for row in rows] + assert sorted(drawn) == sorted(UK_TAKE_UP_SIGNAL_OUTPUTS) + assert len(drawn) == len(set(drawn)) + for stage, rows in by_stage.items(): + parameters = _stage_gate_parameters(stage) + assert parameters["stage"] == stage + assert parameters["check"] == "take_up_signal" + # The gate's declared flags are the stage's, in the terminal gate's + # order, so a receipt that drops one fails closed. + assert list(parameters["outputs"]) == [ + f"{entity}.{output}" for entity, output, _ in rows + ] + # The terminal gate's bounds until a spine receipt measures the stage. + assert parameters["maximum_share_deviation"] == 0.05 + assert ( + _stage_gate_parameters("frs_take_up")["under_two_usage_maximum_share_deviation"] + == 0.1 + ) + + +def _receipt(frame, stage: str) -> dict[str, object]: + from microcosm.build.uk_runtime.frs_take_up import uk_take_up_signal_receipt + + return uk_take_up_signal_receipt( + frame, outputs=_stage_signal_outputs()[stage], contract=_Contract() + ) + + +def _stage_gate(stage: str, receipt: dict[str, object]): + from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate + + return uk_stage_health_gate( + evidence={"stage": stage, "take_up_signal": receipt}, + stage=stage, + check="take_up_signal", + parameters=_stage_gate_parameters(stage), + ) + + +def test_stage_receipt_measures_drawn_flags_and_withholds_thin_populations() -> None: + receipt = _receipt(_frame(), "frs_take_up") + rows = {row["output"]: row for row in receipt["flags"]} + + tfc = rows["benunit.would_claim_tfc"] + # Ten benefit units in ten households carry the flag's population. + assert tfc["population_support"] == "10-29" + assert tfc["weighted_share"] == 0.5 + assert tfc["target"] == 0.5 + assert tfc["distinct_values"] == 2 + assert ( + rows["benunit.would_claim_universal_childcare"][ + "extended_without_universal_units" + ] + == 0 + ) + usage = rows["person.max_free_entitlement_hours_used"] + # Two children in two households: below the disclosure floor, so neither + # the share nor the age-weighted target is given, and the gate fails. + assert usage["under_two_usage"] is True + assert usage["weighted_share"] == "<10" + assert usage["target"] == "<10" + result = _stage_gate("frs_take_up", receipt) + assert result.passed is False + assert any("max_free_entitlement_hours_used" in f for f in result.failures) + assert all("withheld" in f for f in result.failures) + + +def test_stage_take_up_signal_gate_passes_and_names_each_defect() -> None: + frame = _frame() + passed = _stage_gate("frs_household_draws", _receipt(frame, "frs_household_draws")) + assert passed.passed is True + assert passed.details["household.property_purchased"]["absolute_deviation"] == 0 + + frame.table("household")["property_purchased"] = [True] * 9 + [False] + off = _stage_gate("frs_household_draws", _receipt(frame, "frs_household_draws")) + assert off.passed is False + assert any( + "household.property_purchased's weighted share 0.9000" in f + for f in off.failures + ) + + frame = _frame() + frame.table("person")["would_claim_scp"] = True + constant = _stage_gate("frs_person_draws", _receipt(frame, "frs_person_draws")) + assert constant.passed is False + assert any("would_claim_scp is constant" in f for f in constant.failures) + + receipt = _receipt(_frame(), "frs_household_draws") + receipt["flags"] = receipt["flags"][1:] + omitted = _stage_gate("frs_household_draws", receipt) + assert omitted.passed is False + assert any("omits the declared flags" in f for f in omitted.failures) + + +def test_household_draw_stage_records_its_take_up_receipt() -> None: + from microcosm.build.uk_runtime.frs_household_draws import ( + UKFRSHouseholdDrawsStageTransform, + ) + + stage = UKFRSHouseholdDrawsStageTransform(contract=_Contract(), stage=None) + with pytest.raises(RuntimeError, match="completed stage run"): + stage.checkpoint_metadata() + stage(_frame()) + evidence = stage.checkpoint_metadata()["evidence"] + assert evidence["stage"] == "frs_household_draws" + assert [row["output"] for row in evidence["take_up_signal"]["flags"]] == list( + _stage_gate_parameters("frs_household_draws")["outputs"] + ) diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 24d9ba44a3..9c92297a1b 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -451,13 +451,13 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "44fe7b1ac4660db546e8b26c8430d22b6833463de5657d4de8ea9f6deecc31c1" + "b02785c2052f52bd620d0fc731470bf77528e91360faf53bce489cc697dd2472" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "0284b3a472b8beabc2c8c1912993dd6c7662373171dbd2ab79ee4658d1fdc258" + "8bca7f6593404f4aea80d2b3599385af61dd805b2eecf217ad977c907174732e" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f73eede7066bf1a01c06a3bd3aca93709a3bf424053715e2ec33c358a88a7293" + "f172457fb8b071da8c2ca5cd846fc5e17032780ed0ca0c8cfdea343bfe88867a" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -558,6 +558,9 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_property_purchases_fit": ("stage_health", "transferred"), "uk_stage_uc_legacy_closure_take_up_contract": ("stage_health", "transferred"), "uk_stage_frs_person_draws_apprentices": ("stage_health", "transferred"), + "uk_stage_frs_take_up_signal": ("stage_health", "assembled"), + "uk_stage_frs_person_draws_take_up_signal": ("stage_health", "assembled"), + "uk_stage_frs_household_draws_take_up_signal": ("stage_health", "assembled"), "uk_stage_age_tail_targets": ("stage_health", "assembled"), "uk_stage_frs_relationships_composition": ("stage_health", "assembled"), "uk_ledger_compile_parity_local_incumbent_2025": ( @@ -664,6 +667,9 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_property_purchases_fit", "uk_stage_uc_legacy_closure_take_up_contract", "uk_stage_frs_person_draws_apprentices", + "uk_stage_frs_take_up_signal", + "uk_stage_frs_person_draws_take_up_signal", + "uk_stage_frs_household_draws_take_up_signal", "uk_stage_age_tail_targets", "uk_stage_frs_relationships_composition", "uk_cgt_projection_entrants", @@ -885,6 +891,9 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: "uk_stage_frs_hmrc_spine_leaves_signal", "uk_stage_frs_annual_income_spells", "uk_stage_frs_person_draws_apprentices", + "uk_stage_frs_take_up_signal", + "uk_stage_frs_person_draws_take_up_signal", + "uk_stage_frs_household_draws_take_up_signal", "uk_stage_frs_relationships_composition", "uk_stage_high_value_home_support_mass", "uk_stage_hmrc_cgt_asset_type_spine_summary", @@ -955,10 +964,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "8e3f82d12cd55031b4c29b55676287f1778453befc46abefff392ef12beb6065" + "67116c007acc76d7aa95f0ab808bea32f749c7fbf167164c97c65e3b05dabe40" ), "policy_sha256": ( - "09046812edfa6538e9489f0a462992d74352af9b5d1d6fc9b26a2c5d112633c9" + "c5e2159ed6f5db35b9efee701e7989b277d3120fd53e0ec084b5bd3a3c6a6340" ), }, "calibration_seam": { @@ -971,7 +980,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: }, "release_cut": { "gates_manifest_sha256": ( - "32ed07b6092409c3ec91240926be4d8a7262f4b26076d6ba62021d8c0f2ee520" + "7dba221ce8ab8237643275a6f6336870f8938cbbd9ca2734c097d2532cb04d92" ), "policy_sha256": ( "44d6e0fc2a8fb78cb358969b4a471cb15274371e31b6234ddd29e6979b43cc00" diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index c2fefbe81e..25ba02abd1 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -213,13 +213,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "44fe7b1ac4660db546e8b26c8430d22b6833463de5657d4de8ea9f6deecc31c1" + "b02785c2052f52bd620d0fc731470bf77528e91360faf53bce489cc697dd2472" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "0284b3a472b8beabc2c8c1912993dd6c7662373171dbd2ab79ee4658d1fdc258" + "8bca7f6593404f4aea80d2b3599385af61dd805b2eecf217ad977c907174732e" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f73eede7066bf1a01c06a3bd3aca93709a3bf424053715e2ec33c358a88a7293" + "f172457fb8b071da8c2ca5cd846fc5e17032780ed0ca0c8cfdea343bfe88867a" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" @@ -359,6 +359,21 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "transferred", None, ), + "uk_stage_frs_take_up_signal": ( + "stage_health", + "assembled", + None, + ), + "uk_stage_frs_person_draws_take_up_signal": ( + "stage_health", + "assembled", + None, + ), + "uk_stage_frs_household_draws_take_up_signal": ( + "stage_health", + "assembled", + None, + ), "uk_stage_hmrc_cgt_asset_type_spine_summary": ( "stage_health", "transferred", @@ -1431,6 +1446,9 @@ def _gate_battery_payload( "uk_stage_property_purchases_fit": "property_purchases", "uk_stage_uc_legacy_closure_take_up_contract": "uc_legacy_closure_take_up", "uk_stage_frs_person_draws_apprentices": "frs_person_draws", + "uk_stage_frs_take_up_signal": "frs_take_up", + "uk_stage_frs_person_draws_take_up_signal": "frs_person_draws", + "uk_stage_frs_household_draws_take_up_signal": "frs_household_draws", "uk_stage_age_tail_targets": "age_tail", "uk_stage_frs_relationships_composition": "frs_relationships", } From 5c7a40d9c4c94f71729675054150f6d762dc8777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:27:10 +0000 Subject: [PATCH 17/39] Make the promoted national line the default UK load microcosm#823 (tracked in #1095). The registry kept the UK 2024-25 national line off the default variant until its first certified cut existed on the Hub, so that resolve("uk") never chased an absent pointer; its comment named the flip a one-line follow-up after promotion (review of #966, Max's #823 ruling). Checked on 2026-10-29: latest-national.json on policyengine/populace-uk-private names microcosm-uk-2024-25-national-20261025T091414Z-a6299504 (updated 2026-10-26), with its release certification, built on policyengine-uk 2.151.0, the version #1095 names for the flip. The entry's variant becomes DEFAULT_VARIANT, so resolve("uk") and load("uk", 2025) follow latest-national.json, and load("uk", 2023) stays on latest.json. This changes the default UK load for every consumer of microcosm.data; no other local repository names the retired national variant. The registry, loader and assembler tests and the release runbook follow; the live pointer test now branches on the line pointer, not the variant, and resolves the promoted cut. Co-Authored-By: Claude Opus 5.5 --- .../823-national-line-default-load.changed.md | 1 + ...k-national-release-assembly-runbook-806.md | 12 ++-- .../uk/test_uk_release_assembler.py | 4 +- .../src/microcosm/data/registry.py | 14 ++--- .../tests/engine_free/shared/test_loader.py | 58 +++++++++---------- .../tests/engine_free/shared/test_registry.py | 22 +++---- 6 files changed, 54 insertions(+), 57 deletions(-) create mode 100644 changelog.d/823-national-line-default-load.changed.md diff --git a/changelog.d/823-national-line-default-load.changed.md b/changelog.d/823-national-line-default-load.changed.md new file mode 100644 index 0000000000..43b06fe7d0 --- /dev/null +++ b/changelog.d/823-national-line-default-load.changed.md @@ -0,0 +1 @@ +The UK 2024-25 national line is the default UK load: `microcosm.data.load("uk")` and `load("uk", 2025)` follow `latest-national.json`, which has named the certified cut microcosm-uk-2024-25-national-20261025T091414Z-a6299504 (built on policyengine-uk 2.151.0) since 26 October 2026, instead of the June 2023 `populace_uk_2023` artifact, which stays at `load("uk", 2023)`. The line's own `national` variant key retires (microcosm#823, Max's ruling). diff --git a/docs/uk-national-release-assembly-runbook-806.md b/docs/uk-national-release-assembly-runbook-806.md index bec7ea1896..38a19e3e6c 100644 --- a/docs/uk-national-release-assembly-runbook-806.md +++ b/docs/uk-national-release-assembly-runbook-806.md @@ -222,13 +222,11 @@ in §4. The promotion moves only `latest-national.json`, recording `national` as the line and the reviewed cut tag as its `revision`. It never moves the repository-global `latest.json`, which remains on the June 2023 release. -The 2025 national entry is registered off the default variant until this -first promotion: `microcosm.data.load("uk", 2025, variant="national")` follows -`latest-national.json` as soon as the pointer exists, while -`microcosm.data.resolve("uk")` stays on the June 2023 line. The default moves -in a one-line follow-up PR after promotion (the registry entry's `variant` -becomes the default), with its test; sequencing it this way means a default -load never chases a pointer that does not exist yet. An explicit +The 2025 national entry was registered off the default variant until the +first promotion, so that a default load never chased a pointer that did not +exist yet. The first certified cut was promoted on 2026-10-26, and the entry +is now the default variant (microcosm#823): `microcosm.data.load("uk")` and +`microcosm.data.load("uk", 2025)` follow `latest-national.json`. An explicit `microcosm.data.load("uk", 2023)` continues to follow `latest.json`. With `SLACK_WEBHOOK_POPULACE_UK` configured, successful promotion sends an diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py index 5c325d86a6..68f4fc644a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py @@ -28,7 +28,7 @@ uk_weight_projection_factor, ) from microcosm.data.contract import validate_release_dir -from microcosm.data.registry import REGISTRY +from microcosm.data.registry import DEFAULT_VARIANT, REGISTRY from microcosm.frame import WeightKind from test_support.paths import paths_for @@ -87,7 +87,7 @@ def test_national_dataset_filename_mirrors_registry() -> None: assert driver._DATASET_KEY == "microcosm_uk_2024_25" assert driver._DATASET_FILENAME == f"{driver._DATASET_KEY}.h5" - assert REGISTRY[("uk", 2025, "national")].filename == driver._DATASET_FILENAME + assert REGISTRY[("uk", 2025, DEFAULT_VARIANT)].filename == driver._DATASET_FILENAME def _frame(weights: list[float], *, weight_kind: WeightKind): diff --git a/packages/microcosm-data/src/microcosm/data/registry.py b/packages/microcosm-data/src/microcosm/data/registry.py index e16e9f45fa..385a062c01 100644 --- a/packages/microcosm-data/src/microcosm/data/registry.py +++ b/packages/microcosm-data/src/microcosm/data/registry.py @@ -114,15 +114,15 @@ def register(spec: DatasetSpec) -> DatasetSpec: register( DatasetSpec( # microcosm#823: the UK 2024-25 national line, followed through its - # own pointer. Registered OFF the default variant until the first - # promoted cut exists on the Hub: resolve("uk") picks the latest - # default-variant year at import time, so a default entry here would - # send every default load to a pointer that does not exist yet. The - # flip to DEFAULT_VARIANT is a one-line follow-up after promotion - # (review of #966; Max's #823 ruling keys the line as a variant). + # own pointer, is the default UK load. It stayed off the default + # variant until its first certified cut was promoted (review of #966; + # Max's #823 ruling), and latest-national.json has named + # microcosm-uk-2024-25-national-20261025T091414Z-a6299504 since + # 2026-10-26. resolve("uk") picks the latest default-variant year, so + # it loads this line; the June 2023 artifact stays at ("uk", 2023). country="uk", year=2025, - variant="national", + variant=DEFAULT_VARIANT, hf_repo="policyengine/populace-uk-private", filename="microcosm_uk_2024_25.h5", engine_module="policyengine_uk.data", diff --git a/packages/microcosm-data/tests/engine_free/shared/test_loader.py b/packages/microcosm-data/tests/engine_free/shared/test_loader.py index 69c5af1096..decabfd3d3 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_loader.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_loader.py @@ -345,23 +345,22 @@ def __init__(self, *, file_path: str) -> None: return constructed -def test_resolve_uk_default_stays_on_2023_until_the_national_line_is_promoted(): - """The national line is registered off the default variant until its - pointer exists on the Hub, so a default load never chases an absent - pointer (review of #966); the flip is a one-line follow-up.""" - assert latest_year("uk") == 2023 - assert resolve("uk").key == ("uk", 2023, DEFAULT_VARIANT) - assert resolve("uk", 2025, variant="national").pointer_path == ( - "latest-national.json" - ) - with pytest.raises(ValueError, match="published years"): - resolve("uk", 2025) +def test_resolve_uk_default_is_the_promoted_national_line(): + """microcosm#823: once the national line's first certified cut was + promoted, the line became the default UK load; the June 2023 line stays + addressable at its year and its own pointer (Max's #823 ruling).""" + assert latest_year("uk") == 2025 + assert resolve("uk").key == ("uk", 2025, DEFAULT_VARIANT) + assert resolve("uk").pointer_path == "latest-national.json" + assert resolve("uk", 2023).pointer_path == "latest.json" + with pytest.raises(ValueError, match="variant 'national'"): + resolve("uk", 2025, variant="national") def test_resolve_uk_national_variant_follows_the_line_pointer( tmp_path: Path, ) -> None: - spec = resolve("uk", 2025, variant="national") + spec = resolve("uk", 2025) manifest = _uk_release_manifest() hub = _line_pointer_hub( tmp_path, @@ -374,7 +373,7 @@ def test_resolve_uk_national_variant_follows_the_line_pointer( certified = loader._resolve_certified_release(spec, hub_download=hub) manifest_path = f"releases/{UK_NATIONAL_RELEASE_ID}/release_manifest.json" - assert spec.key == ("uk", 2025, "national") + assert spec.key == ("uk", 2025, DEFAULT_VARIANT) assert spec.pointer_path == "latest-national.json" assert certified.release_id == UK_NATIONAL_RELEASE_ID assert certified.artifact_revision == UK_NATIONAL_CUT_TAG @@ -449,9 +448,7 @@ def test_line_pointer_refuses_any_artifact_revision_mismatch(tmp_path: Path) -> ValueError, match=r"artifacts not pinned to expected revision.*calibration_report", ): - loader._resolve_certified_release( - resolve("uk", 2025, variant="national"), hub_download=hub - ) + loader._resolve_certified_release(resolve("uk", 2025), hub_download=hub) def test_local_area_line_selects_its_only_microdata_artifact(tmp_path: Path) -> None: @@ -568,9 +565,7 @@ def test_loader_refuses_an_unknown_dataset_role(tmp_path: Path) -> None: ) with pytest.raises(ValueError, match="unknown dataset_role 'research_preview'"): - loader._resolve_certified_release( - resolve("uk", 2025, variant="national"), hub_download=hub - ) + loader._resolve_certified_release(resolve("uk", 2025), hub_download=hub) def test_download_uses_pointer_manifest_and_release_revision( @@ -804,7 +799,7 @@ def _is_missing_pointer_error(exc: BaseException, pointer_path: str) -> bool: [ ("us", 2024, DEFAULT_VARIANT), ("uk", 2023, DEFAULT_VARIANT), - ("uk", 2025, "national"), + ("uk", 2025, DEFAULT_VARIANT), ], ) def test_live_latest_pointer_resolves_to_a_coherent_certified_release( @@ -823,6 +818,9 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( which are updated atomically with each certification PR. """ spec = resolve(country, year, variant=variant) + # The UK 2025 default follows its line's pointer since microcosm#823, so + # the pointer, not the variant, says how the release is named. + line = loader._line_from_pointer_path(spec.pointer_path) try: certified = loader._resolve_certified_release(spec) except Exception as exc: @@ -834,26 +832,26 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( pytest.skip( f"repo requires credentials this environment lacks (private): {exc}" ) - if variant != DEFAULT_VARIANT and _is_missing_pointer_error( - exc, spec.pointer_path - ): + if line is not None and _is_missing_pointer_error(exc, spec.pointer_path): # A line pointer exists only once its first cut is promoted; # until then the line is registered but not yet live. Anything # else on a promoted line (a manifest 404, a bad pin) fails. pytest.skip(f"line pointer {spec.pointer_path} not yet promoted: {exc}") raise - assert certified.release_id.startswith( - # Live certified releases still carry the pre-rename id prefix; new - # builds may adopt the microcosm- prefix at the next versioned release. - (f"microcosm-{country}-{spec.year}-", f"populace-{country}-{spec.year}-") - ) assert certified.artifact_repo_id == spec.hf_repo assert certified.artifact_path == spec.filename - if variant == DEFAULT_VARIANT: + if line is None: + assert certified.release_id.startswith( + # Live certified releases still carry the pre-rename id prefix; new + # builds may adopt the microcosm- prefix at the next versioned + # release. + (f"microcosm-{country}-{spec.year}-", f"populace-{country}-{spec.year}-") + ) assert certified.artifact_revision == certified.release_id else: # A line pointer names the immutable cut tag of its constant id. + assert certified.release_id.startswith(f"microcosm-{country}-") assert certified.artifact_revision.startswith(f"{certified.release_id}-") assert re.fullmatch(r"[0-9a-f]{64}", certified.artifact_sha256) assert certified.model.name == spec.engine_package @@ -862,7 +860,7 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( def test_line_pointer_refuses_a_manifest_with_another_lines_role(tmp_path: Path): """A line pointer carries one role: the national pointer cannot select a local-area manifest, nor a local-area pointer a national one.""" - spec = resolve("uk", 2025, variant="national") + spec = resolve("uk", 2025) manifest = _uk_release_manifest() manifest["dataset_role"] = "non_default_local_area" manifest["default_datasets"] = {} diff --git a/packages/microcosm-data/tests/engine_free/shared/test_registry.py b/packages/microcosm-data/tests/engine_free/shared/test_registry.py index eae3a397a5..066a1933ff 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_registry.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_registry.py @@ -69,8 +69,8 @@ def test_available_lists_default_variant_keys_only_sorted(monkeypatch) -> None: keys = available() assert ("us", 2024) in keys assert ("uk", 2023) in keys - # The national line is off the default variant until promoted. - assert ("uk", 2025) not in keys + # The national line is the default variant since its promotion (#823). + assert ("uk", 2025) in keys assert ("zz", 2099) not in keys assert keys == sorted(keys) @@ -146,16 +146,16 @@ def test_uk_2025_dense_is_registered_off_the_default_variant() -> None: assert spec.filename == "microcosm_uk_2024_25_dense.h5" assert spec.engine_class == "UKSingleYearDataset" assert spec.engine_package == "policyengine-uk" - assert ("uk", 2025, "national") in REGISTRY + assert ("uk", 2025, DEFAULT_VARIANT) in REGISTRY -def test_uk_2025_national_is_registered_off_the_default_variant_until_promoted(): - """resolve("uk") must not reach a pointer that does not exist yet: the - line's pointer appears on the Hub at its first promotion, and only the - follow-up flip to the default variant moves the default (review of - #966; Max's #823 ruling keys the line as a variant).""" - spec = REGISTRY[("uk", 2025, "national")] - assert spec.variant == "national" != DEFAULT_VARIANT +def test_uk_2025_national_line_is_the_default_variant_after_promotion(): + """microcosm#823: the line's first certified cut was promoted on + 2026-10-26, so the line moved to the default variant (Max's #823 + ruling) and its own variant key retired; the June 2023 line stays + addressable at its year.""" + spec = REGISTRY[("uk", 2025, DEFAULT_VARIANT)] assert spec.pointer_path == "latest-national.json" assert spec.filename == "microcosm_uk_2024_25.h5" - assert ("uk", 2025, DEFAULT_VARIANT) not in REGISTRY + assert ("uk", 2025, "national") not in REGISTRY + assert REGISTRY[("uk", 2023, DEFAULT_VARIANT)].filename == "populace_uk_2023.h5" From 50eb504fba16371321f61fe3b49f2dcc24d32cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:44:55 +0000 Subject: [PATCH 18/39] Restate the bus resources' readers and the FRS 2024-25 leaf note MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two items from microcosm#1095's stale-text list, both without a signature: - The three vendored bus resources said that the LCFS and ETB bus-fare and bus-support rakes consumed them. microcosm#930 and María's ruling of 2026-09-23 replaced those rakes with the bus fare and bus support pricing. The purposes in the selection register and in the vendored files now name the pricing, and dft_bus_value_anchors.json lists bus_support_pricing, which reads its net support, among its consumers. - The Incapacity Benefit SPI leaf (FRS benefit code 17) was "a structural zero in the audited 2023-24 FRS". A private check of the FRS 2024-25 benefits table found no code-17 row, so the note now names both vintages. The text is in sources.yaml, its source_stages.json projection and the contract's expected string. Both move stage contract digests, of frs_hmrc_spine_leaves, lcfs_consumption and etb_services. So tools/graph_uk_spine_fixture.py regenerated the charter-H2 fixture (only those three digests and the leaf note change), and the release input coverage manifest takes the new source manifest digest. Co-Authored-By: Claude Opus 5.5 --- ...-stale-resource-and-source-text.changed.md | 1 + .../build/uk/devolved_bus_finance.json | 2 +- .../microcosm/build/uk/dft_bus_journeys.json | 2 +- .../build/uk/dft_bus_value_anchors.json | 5 ++- .../uk/ledger_fact_vendor_selections.json | 9 ++-- .../uk/release_input_coverage_manifest.json | 44 +++++++++---------- .../src/microcosm/build/uk/source_stages.json | 2 +- .../src/microcosm/build/uk/spec/sources.yaml | 2 +- .../build/uk_runtime/hmrc_source_contract.py | 2 +- .../parity/uk_spine/sources/fixture.json | 2 +- .../fixtures/parity/uk_spine/uk_spine.json | 2 +- 11 files changed, 38 insertions(+), 35 deletions(-) create mode 100644 changelog.d/1095-uk-stale-resource-and-source-text.changed.md diff --git a/changelog.d/1095-uk-stale-resource-and-source-text.changed.md b/changelog.d/1095-uk-stale-resource-and-source-text.changed.md new file mode 100644 index 0000000000..bbf3c16e6d --- /dev/null +++ b/changelog.d/1095-uk-stale-resource-and-source-text.changed.md @@ -0,0 +1 @@ +Three vendored bus resources now say that the bus fare and bus support pricing read them, not the retired LCFS and ETB rakes, and `dft_bus_value_anchors.json` lists `bus_support_pricing` among its readers. The Incapacity Benefit SPI leaf's note now says the leaf is a structural zero in the FRS 2023-24 and 2024-25. The charter-H2 graph fixture and the release input coverage manifest follow the stage contract digests (microcosm#1095). diff --git a/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json b/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json index 2aeeb7ee84..c15b14ca4d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json +++ b/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json @@ -3,7 +3,7 @@ "country": "uk", "kind": "uk_vendored_ledger_facts", "resource": "devolved_bus_finance.json", - "purpose": "Scotland bus and coach statistics (2024 and 2025 editions: journeys, passenger revenue, operator revenue, government support components, fare index); Welsh local authority roads and transport revenue outturn public transport lines for the Wales total; Northern Ireland Transport Holding Company transactions with DfI; DfI Translink bus journeys and passenger receipts by service. Consumed by the devolved cells of the bus-fare and bus-support rakes and the country-leg bus targets; DfI Northern Ireland Translink full-fare concession passenger journeys by fiscal year (the concessionary split for the Northern Ireland bus price).", + "purpose": "Scotland bus and coach statistics (2024 and 2025 editions: journeys, passenger revenue, operator revenue, government support components, fare index); Welsh local authority roads and transport revenue outturn public transport lines for the Wales total; Northern Ireland Transport Holding Company transactions with DfI; DfI Translink bus journeys and passenger receipts by service. Consumed by the devolved cells of the bus fare and bus support pricing and the country-leg bus targets; DfI Northern Ireland Translink full-fare concession passenger journeys by fiscal year (the concessionary split for the Northern Ireland bus price).", "consumers": [ "uk_runtime.lcfs_consumption", "uk_runtime.etb_services", diff --git a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json index 9cba4f31c9..dc81db332f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json @@ -3,7 +3,7 @@ "country": "uk", "kind": "uk_vendored_ledger_facts", "resource": "dft_bus_journeys.json", - "purpose": "DfT BUS01 local bus passenger journeys by area (England, London, England outside London, the metropolitan split and the nine English regions; year-ending-March labels 2023 to 2025), the BUS01c elderly and disabled and total concessionary journeys by the same areas, the BUS05i operating revenue and support components beyond fare receipts and net support (concessionary travel reimbursement, Bus Service Operators Grant, gross and net public transport support, total operating revenue, additional funding to operators, fare cap) for England, London and England outside London, and the ONS mid-year population of the four UK countries and the nine English regions (England is the regions' sum). Consumed by the bus fare pricing (receipts over fare-paying boardings, boardings per resident trip) and the support-per-journey diagnostic (microcosm#930).", + "purpose": "DfT BUS01 local bus passenger journeys by area (England, London, England outside London, the metropolitan split and the nine English regions; year-ending-March labels 2023 to 2025), the BUS01c elderly and disabled and total concessionary journeys by the same areas, the BUS05i operating revenue and support components beyond fare receipts and net support (concessionary travel reimbursement, Bus Service Operators Grant, gross and net public transport support, total operating revenue, additional funding to operators, fare cap) for England, London and England outside London, and the ONS mid-year population of the four UK countries and the nine English regions (England is the regions' sum). Consumed by the bus fare pricing (receipts over fare-paying boardings, boardings per resident trip; microcosm#930) and the bus support pricing (the concessionary reimbursement per concessionary boarding and the rest of the net support per boarding; Mar\u00eda's ruling of 2026-09-23).", "consumers": [ "uk_runtime.bus_fare_pricing", "uk_runtime.etb_services", diff --git a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json index eeb9c8c4a8..fb778a1422 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json @@ -3,11 +3,12 @@ "country": "uk", "kind": "uk_vendored_ledger_facts", "resource": "dft_bus_value_anchors.json", - "purpose": "DfT BUS05i passenger fare receipts and total estimated net support for England, London and England outside London (year-ending-March labels 2023 to 2025); BUS0415 local bus fares index quarter-end months for the same three areas; NTS0705a local bus trips per person by household income quintile, both series, 2023 and 2024. Consumed by the LCFS and ETB bus-fare and bus-support rakes and by the BUS0415 period-alignment pass.", + "purpose": "DfT BUS05i passenger fare receipts and total estimated net support for England, London and England outside London (year-ending-March labels 2023 to 2025); BUS0415 local bus fares index quarter-end months for the same three areas; NTS0705a local bus trips per person by household income quintile, both series, 2023 and 2024. Consumed by the bus fare pricing (the receipts set the yield per fare-paying boarding) and the bus support pricing (the net support per boarding), which replaced the LCFS and ETB rakes (microcosm#930; Mar\u00eda's ruling of 2026-09-23), by the bus targets and by the BUS0415 period-alignment pass.", "consumers": [ "uk_runtime.ledger_targets", "uk_runtime.lcfs_consumption", - "uk_runtime.etb_services" + "uk_runtime.etb_services", + "uk_runtime.bus_support_pricing" ], "planned_consumers": [], "policy": "Rows are copied verbatim from the pinned Chronicle consumer feed named in source_fact_feed; every value is a publisher-stated fact. Consumers declare their own arithmetic on these rows and never edit this file by hand: regenerate it with tools/vendor_uk_ledger_facts.py.", diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_fact_vendor_selections.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_fact_vendor_selections.json index cd43f2ec8b..f913d260cc 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ledger_fact_vendor_selections.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_fact_vendor_selections.json @@ -6,11 +6,12 @@ "resources": [ { "resource": "dft_bus_value_anchors.json", - "purpose": "DfT BUS05i passenger fare receipts and total estimated net support for England, London and England outside London (year-ending-March labels 2023 to 2025); BUS0415 local bus fares index quarter-end months for the same three areas; NTS0705a local bus trips per person by household income quintile, both series, 2023 and 2024. Consumed by the LCFS and ETB bus-fare and bus-support rakes and by the BUS0415 period-alignment pass.", + "purpose": "DfT BUS05i passenger fare receipts and total estimated net support for England, London and England outside London (year-ending-March labels 2023 to 2025); BUS0415 local bus fares index quarter-end months for the same three areas; NTS0705a local bus trips per person by household income quintile, both series, 2023 and 2024. Consumed by the bus fare pricing (the receipts set the yield per fare-paying boarding) and the bus support pricing (the net support per boarding), which replaced the LCFS and ETB rakes (microcosm#930; Mar\u00eda's ruling of 2026-09-23), by the bus targets and by the BUS0415 period-alignment pass.", "consumers": [ "uk_runtime.ledger_targets", "uk_runtime.lcfs_consumption", - "uk_runtime.etb_services" + "uk_runtime.etb_services", + "uk_runtime.bus_support_pricing" ], "planned_consumers": [], "selections": [ @@ -286,7 +287,7 @@ }, { "resource": "devolved_bus_finance.json", - "purpose": "Scotland bus and coach statistics (2024 and 2025 editions: journeys, passenger revenue, operator revenue, government support components, fare index); Welsh local authority roads and transport revenue outturn public transport lines for the Wales total; Northern Ireland Transport Holding Company transactions with DfI; DfI Translink bus journeys and passenger receipts by service. Consumed by the devolved cells of the bus-fare and bus-support rakes and the country-leg bus targets; DfI Northern Ireland Translink full-fare concession passenger journeys by fiscal year (the concessionary split for the Northern Ireland bus price).", + "purpose": "Scotland bus and coach statistics (2024 and 2025 editions: journeys, passenger revenue, operator revenue, government support components, fare index); Welsh local authority roads and transport revenue outturn public transport lines for the Wales total; Northern Ireland Transport Holding Company transactions with DfI; DfI Translink bus journeys and passenger receipts by service. Consumed by the devolved cells of the bus fare and bus support pricing and the country-leg bus targets; DfI Northern Ireland Translink full-fare concession passenger journeys by fiscal year (the concessionary split for the Northern Ireland bus price).", "consumers": [ "uk_runtime.lcfs_consumption", "uk_runtime.etb_services", @@ -806,7 +807,7 @@ }, { "resource": "dft_bus_journeys.json", - "purpose": "DfT BUS01 local bus passenger journeys by area (England, London, England outside London, the metropolitan split and the nine English regions; year-ending-March labels 2023 to 2025), the BUS01c elderly and disabled and total concessionary journeys by the same areas, the BUS05i operating revenue and support components beyond fare receipts and net support (concessionary travel reimbursement, Bus Service Operators Grant, gross and net public transport support, total operating revenue, additional funding to operators, fare cap) for England, London and England outside London, and the ONS mid-year population of the four UK countries and the nine English regions (England is the regions' sum). Consumed by the bus fare pricing (receipts over fare-paying boardings, boardings per resident trip) and the support-per-journey diagnostic (microcosm#930).", + "purpose": "DfT BUS01 local bus passenger journeys by area (England, London, England outside London, the metropolitan split and the nine English regions; year-ending-March labels 2023 to 2025), the BUS01c elderly and disabled and total concessionary journeys by the same areas, the BUS05i operating revenue and support components beyond fare receipts and net support (concessionary travel reimbursement, Bus Service Operators Grant, gross and net public transport support, total operating revenue, additional funding to operators, fare cap) for England, London and England outside London, and the ONS mid-year population of the four UK countries and the nine English regions (England is the regions' sum). Consumed by the bus fare pricing (receipts over fare-paying boardings, boardings per resident trip; microcosm#930) and the bus support pricing (the concessionary reimbursement per concessionary boarding and the rest of the net support per boarding; Mar\u00eda's ruling of 2026-09-23).", "consumers": [ "uk_runtime.bus_fare_pricing", "uk_runtime.etb_services", diff --git a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json index 2bdf142a49..33767802a2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json @@ -470,7 +470,7 @@ "required_mass_change_reason": "Capital-gains incidence anchor moves the mass of non-liable clone households back to their paired originals until the sub-exempt and loss-making clone mass match the Advani-Summers reporter composition at the redrawn liable mass; every pair's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, the HMRC Table 3 redrawn gains on the spine and Advani-Summers capital-gains incidence" @@ -493,7 +493,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, and Advani-Summers capital-gains incidence" @@ -516,7 +516,7 @@ "required_mass_change_reason": "Capital-gains residential split divides every household carrying liable gainers into arms weighted by the solved residential probabilities, one arm per subset of residential gainers; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) on the amounts the Table 3 redraw placed" @@ -538,7 +538,7 @@ "required_mass_change_reason": "Capital-gains support split divides the wealthiest households of each HMRC Table 3 income band into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 3 for 2024-25, via the vendored conditioning facts", "survey": "Family Resources Survey 2024-25, SPI synthetic support and HMRC Capital Gains Tax statistics Table 3 (2024-25 individuals by size of gain and taxable income)" @@ -567,7 +567,7 @@ "required_mass_change_reason": "ETB public-services imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab, DfT rail fare index, and public NHS activity/cost table.", "survey": "Effects of Taxes and Benefits 1977-2024 and NHS age-gender public table" @@ -587,7 +587,7 @@ "required_mass_change_reason": "ETB VAT expenditure-rate imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource.", "survey": "Effects of Taxes and Benefits 1977-2024" @@ -609,7 +609,7 @@ "required_mass_change_reason": "High-value home support divides every owner household in the top value stratum of its region into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Microcosm structural operator (microcosm#1240 fix 1); no publisher input", "survey": "Family Resources Survey 2024-25 and SPI synthetic support, after the WAS wealth draw and the regional property uprating" @@ -630,7 +630,7 @@ "required_mass_change_reason": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative), Table 4.1 (individuals claiming Business Asset Disposal Relief or Investors' Relief by band of qualifying gain, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" @@ -654,7 +654,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", "conditioning_resource_sha256": "e54cdad4cfe4498bfddb329d6b0aef468ea542a55c1970df574859626a3d19d3", @@ -744,7 +744,7 @@ "full_frs_tei_band_unavailable" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "hmrc_surface": "2023-24", "mapped_build_period": "2024", @@ -812,7 +812,7 @@ "required_mass_change_reason": "LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", "survey": "Living Costs and Food Survey 2024-25" @@ -838,7 +838,7 @@ "required_mass_change_reason": "NTS bus-travel imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Department for Transport National Travel Survey, UK Data Service SN 5340 (End User Licence, 19th edition, November 2025), DOI 10.5255/UKDA-SN-5340-19; local licensed tab files (household, individual, trip); England residents only from 2013.", "survey": "National Travel Survey 2002-2024" @@ -858,7 +858,7 @@ "required_mass_change_reason": "Private-school attendance stored on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "policyengine-uk attends_private_school (the gov.simulation.private_school_vat attendance rates and factor), evaluated by the pinned engine", "survey": "policyengine-uk private-school attendance imputation, stored at the spine's weights" @@ -881,7 +881,7 @@ "property_finance_costs" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "https://www.gov.uk/government/statistics/property-rental-income-statistics", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)" @@ -902,7 +902,7 @@ "required_mass_change_reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics", "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b" @@ -925,7 +925,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations", "survey": "HM Land Registry Price Paid latest sales uprated with the UK House Price Index, owner-weighted by region (the dense value node's knots, region level)" @@ -949,7 +949,7 @@ "non_residential_property_value" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "MHCLG dwellings and the UK House Price Index regional average price averaged over the twelve months of calendar 2024 from the July 2026 full file, the frame's valuation basis, so the engine's annual uprating from 2024 projects the value once (microcosm#1240 fix 5).", "survey": "Public regional property reference" @@ -977,7 +977,7 @@ "employment_income" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "HMRC, Salary sacrifice reform for pension contributions effective from 6 April 2029", "survey": "Family Resources Survey 2024-25 salary-sacrifice respondents and HMRC salary-sacrifice reform analysis" @@ -1010,7 +1010,7 @@ "household_source_id" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Reserved SPI support households for the HMRC Table 2.5 total-income bands from GBP 200,000, stacked at the published band taxpayer count over the donors per band (PolicyEngine/chronicle#280 lane).", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Income Tax liabilities statistics July 2026 Table 2.5" @@ -1032,7 +1032,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Explore Education Statistics Table 6a, Higher education total", "survey": "Family Resources Survey 2024-25 and Student Loans Company borrower forecasts for England" @@ -1054,7 +1054,7 @@ "required_mass_change_reason": "WAS Lifetime ISA imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "Wealth and Assets Survey round 8" @@ -1093,7 +1093,7 @@ "required_mass_change_reason": "WAS wealth imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5c531c2ab2c429b409be72e03a079bc0f35f54a3f6330498d84a9299ee86d906", + "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed 2006-22 household tab.", "survey": "Wealth and Assets Survey round 8" diff --git a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json index 6754901554..f01e32f918 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -1395,7 +1395,7 @@ "BENEFITS.BENEFIT=17:BENAMT" ], "formula": "sum(BENAMT where BENEFIT == 17) * 52", - "observed_support": "structural zero in the audited 2023-24 FRS; retained so future vintages flow" + "observed_support": "structural zero in the FRS 2023-24 and 2024-25; retained so future vintages flow" } }, "retained_named_subsets": { diff --git a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml index f056d5b181..889606bb5d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -1228,7 +1228,7 @@ stages: raw_sources: - BENEFITS.BENEFIT=17:BENAMT formula: sum(BENAMT where BENEFIT == 17) * 52 - observed_support: structural zero in the audited 2023-24 FRS; retained so future vintages flow + observed_support: structural zero in the FRS 2023-24 and 2024-25; retained so future vintages flow retained_named_subsets: ossben_identifiable_subset: spi_concept: OSSBEN diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_source_contract.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_source_contract.py index b1fa5f66d0..707aab80ac 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_source_contract.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_source_contract.py @@ -329,7 +329,7 @@ def assert_uk_hmrc_income_source_contract_current( failures, f"frs_leaves.{column}.observed_support", observed_support, - "structural zero in the audited 2023-24 FRS; retained so future vintages flow", + "structural zero in the FRS 2023-24 and 2024-25; retained so future vintages flow", ) elif observed_support is not None: failures.append( diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json index 7014621ff7..dcd42310ac 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json @@ -1622,7 +1622,7 @@ "retained_full_constituents": { "hmrc_spi_incapacity_benefit_income": { "formula": "sum(BENAMT where BENEFIT == 17) * 52", - "observed_support": "structural zero in the audited 2023-24 FRS; retained so future vintages flow", + "observed_support": "structural zero in the FRS 2023-24 and 2024-25; retained so future vintages flow", "raw_sources": [ "BENEFITS.BENEFIT=17:BENAMT" ], diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json index 74931ed1ad..de7e2240f6 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json @@ -1 +1 @@ -{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"d8bc929a1afc1fb21b5d8d5e772bcbcf252cb3912626450784e4c7ebaa1a0df7","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employment_income","employment_status","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_apprentice","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"112c502d702c640dedbc2dca7d1cfe5ae43e0f0e3ba6acfe49c738dbbfb7e693","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"5fc311107a78562d5ceea294f16e85ffb5f43426fba0de2133a1cd92bf208eb9","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"add658b5313c84df523abd5725a20538989b5e6bdf1f45ba6a23245a6f67b08d","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"e044163f5b5db2f2f6acea3a80f3729dc132884a3cfaa077a6313f7666a955f4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"5630e05a08aa1b4ba093dedfa104463804b757e4e6fe73704e949bf1579c1a50","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"46f12fdf9228f721d860ff7858b78b25406bb8737628acf63ac17d44d549f657","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"5c84a402f34dc5bfcfc0b3c3c7a5e57576cfd21e7bfdeba3e80dcaf4e9d478ba","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"078a79ce6f8c768c06526f1c05288602ce781e30c77b575b0bdf3f5b7d16da1b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"b21e69bb5b9efe7086c7852f78b5cf4c7267b7bb742d05a0fd0207841097e426","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"wine_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"spirits_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_fermented_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigarettes_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"hand_rolling_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigars_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_gaming_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"pool_betting_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bingo_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"national_lottery_ticket_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_casino_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_lower_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_standard_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_higher_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_fixed_odds_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_uk_horseracing_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_other_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"betting_exchange_commission","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"horse_and_dog_pool_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"91a3358c59b5383b91156f66b0443c910e672e17f73ea19aff1ecd91ca42c029","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"216b28835eba7a952243134dffbb45a1b3a0cdff2e3e7d0e94e2acbf754052b5","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"4c5f4285e8db871e28ba09e54095c9e88cc062469f8a4054ca004b2717ff4ac9","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"e7c7311b3852e67ae755c09456cc10c46136681fa92ade60daa1fbeb581288d5","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"9818609b1003442f197e99ca741dc8db658a82f36c67f35308ceef25537b739e","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"0bf6d4151d9cbd32bde34c2538bf6142d458c8828cc698fa1a9aad0d9e432246","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"78c889ae5a4bd4c61b1e0b259e3fe3e805f76e12c952d0523c92969957db05d5","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"2b4c6d8d31d8a34de880095b90f312b3a7c5723dfdec14096cb7a2eda20e8673","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"d91faf93fc9fc0251b2165af1c79514dc5d942373bc8f13d8d7d5454e0fd931c","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"ee30278543cc0297a5366d855b7753aa04af5518971594c193c52be36bf8a7b4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported","tax_free_savings_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"8400624c4efaf1ab36add705318f660bafff7b73b9770080b6950e50de231bb7","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"b79ce806015de2f1e1703fa68bf4ad871c6df54b5b32633c864632ab68919a48","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"36fe1dfc69fc2a2645b60fa50492c54174e7bb3e1b2ce34243021f2abf01f6e3","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"0fb6748b73a66e8887d8d9a61da4dd9529bfd6e1d50da1ab8d0127bae5b0c070","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"41009badb290aec19613fea5f5b625744529388a367d5a12e85a8067afbb9134","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} +{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"d8bc929a1afc1fb21b5d8d5e772bcbcf252cb3912626450784e4c7ebaa1a0df7","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employment_income","employment_status","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_apprentice","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"112c502d702c640dedbc2dca7d1cfe5ae43e0f0e3ba6acfe49c738dbbfb7e693","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"27882dfc42b4f694906e59a27b21c4e559d535a05750e3d7d0802342750f0e99","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"add658b5313c84df523abd5725a20538989b5e6bdf1f45ba6a23245a6f67b08d","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"e044163f5b5db2f2f6acea3a80f3729dc132884a3cfaa077a6313f7666a955f4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"5630e05a08aa1b4ba093dedfa104463804b757e4e6fe73704e949bf1579c1a50","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"46f12fdf9228f721d860ff7858b78b25406bb8737628acf63ac17d44d549f657","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"5c84a402f34dc5bfcfc0b3c3c7a5e57576cfd21e7bfdeba3e80dcaf4e9d478ba","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"078a79ce6f8c768c06526f1c05288602ce781e30c77b575b0bdf3f5b7d16da1b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"b21e69bb5b9efe7086c7852f78b5cf4c7267b7bb742d05a0fd0207841097e426","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"wine_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"spirits_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_fermented_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigarettes_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"hand_rolling_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigars_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_gaming_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"pool_betting_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bingo_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"national_lottery_ticket_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_casino_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_lower_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_standard_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_higher_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_fixed_odds_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_uk_horseracing_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_other_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"betting_exchange_commission","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"horse_and_dog_pool_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"4e6f3257229860c24e0f3f8d413512c2cdfbf5f86d140cc2a54ede7ba0ada285","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"216b28835eba7a952243134dffbb45a1b3a0cdff2e3e7d0e94e2acbf754052b5","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"5dd8984c666c9b78601730a58a6e8c3704bdf47263ec1d30ac772c6652708507","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"e7c7311b3852e67ae755c09456cc10c46136681fa92ade60daa1fbeb581288d5","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"9818609b1003442f197e99ca741dc8db658a82f36c67f35308ceef25537b739e","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"0bf6d4151d9cbd32bde34c2538bf6142d458c8828cc698fa1a9aad0d9e432246","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"78c889ae5a4bd4c61b1e0b259e3fe3e805f76e12c952d0523c92969957db05d5","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"2b4c6d8d31d8a34de880095b90f312b3a7c5723dfdec14096cb7a2eda20e8673","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"d91faf93fc9fc0251b2165af1c79514dc5d942373bc8f13d8d7d5454e0fd931c","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"ee30278543cc0297a5366d855b7753aa04af5518971594c193c52be36bf8a7b4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported","tax_free_savings_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"8400624c4efaf1ab36add705318f660bafff7b73b9770080b6950e50de231bb7","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"b79ce806015de2f1e1703fa68bf4ad871c6df54b5b32633c864632ab68919a48","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"36fe1dfc69fc2a2645b60fa50492c54174e7bb3e1b2ce34243021f2abf01f6e3","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"0fb6748b73a66e8887d8d9a61da4dd9529bfd6e1d50da1ab8d0127bae5b0c070","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"41009badb290aec19613fea5f5b625744529388a367d5a12e85a8067afbb9134","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.162.14"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} From 3a8038bc085d0b884cdacb8600f3b5ca5e8c9a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 15:26:54 +0000 Subject: [PATCH 19/39] Accept the reference's observation period in monetary binding receipts 8e3394b15 gave LedgerTargetReference an observation_period field. The monetary binding serialises the reference with asdict, so every activated and source reference receipt now carries the key (None unless declared), and microcosm-calibrate's integrity check refused it as an unknown key: the full engine-free run failed test_monetary_targets' two binding tests. The verifier's reference keys gain observation_period, as #834 added the operand keys, and the calibrate fixture's hand-built receipt carries it. Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/calibrate/monetary_binding.py | 3 +++ .../tests/engine_free/shared/test_monetary_binding.py | 1 + 2 files changed, 4 insertions(+) diff --git a/packages/microcosm-calibrate/src/microcosm/calibrate/monetary_binding.py b/packages/microcosm-calibrate/src/microcosm/calibrate/monetary_binding.py index 9eafd926f2..986133e7cb 100644 --- a/packages/microcosm-calibrate/src/microcosm/calibrate/monetary_binding.py +++ b/packages/microcosm-calibrate/src/microcosm/calibrate/monetary_binding.py @@ -71,6 +71,9 @@ class MonetaryBindingIntegrityError(RuntimeError): # declaration that compiled it. "value_operands", "expected_member_count", + # microcosm#1095: a reference can select its facts at a declared + # observation period while the target keeps its own (None otherwise). + "observation_period", } ) _PREPARED_KEYS = frozenset( diff --git a/packages/microcosm-calibrate/tests/engine_free/shared/test_monetary_binding.py b/packages/microcosm-calibrate/tests/engine_free/shared/test_monetary_binding.py index 3af8950df7..932a291242 100644 --- a/packages/microcosm-calibrate/tests/engine_free/shared/test_monetary_binding.py +++ b/packages/microcosm-calibrate/tests/engine_free/shared/test_monetary_binding.py @@ -100,6 +100,7 @@ def _target(values=(2.0, 4.0), ids=(1, 2)): "metadata": source_metadata, "assertion_policy": "observed_only", "period_match_policy": "latest_not_after", + "observation_period": None, "uprating_index": None, "uprating_from_period": None, "uprating_to_period": None, From 88ffbb9aa21a72dd944d7892037c0ff137352a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 15:26:55 +0000 Subject: [PATCH 20/39] Count the five measure exclusions this branch adds fff37ea02 held the three OBR council tax nation rows (ruling D14e) and ae1edf70f held SLC's Scottish and Northern Irish repayment rows (ruling R4), which takes the packaged calibration measure exclusions from 40 to 45 and the census's slc. marker from 3 to 5. test_uk_measure_simulation still said 40 and 3; the full engine-free run caught it. Co-Authored-By: Claude Opus 5.5 --- .../engine_free/uk/test_uk_measure_simulation.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py index 39ee367661..4987c883ec 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py @@ -600,9 +600,11 @@ def test_exclusion_applier_warns_within_week_of_expiry(): # (María's rule of 2026-10-21), re-signed on 2026-10-23. Of the five SLC # rows, the postgraduate repayments row retired from the targets (the # stage assigns no postgraduate plan) and Plan 5's liable stock binds; the - # Plan 5 repayments and the two Plan 2 stocks stay. + # Plan 5 repayments and the two Plan 2 stocks stay. microcosm#1095 splits + # the devolved repayments by nation and holds Scotland's and Northern + # Ireland's (ruling R4: Wales only binds). "_1_000_000_to_inf": 10, - "slc.": 3, + "slc.": 5, # microcosm#1095 (2026-10-07): two bands whose few supporting awards # policyengine-uk 2.122.2 moves out join the uk-data#452 class. # microcosm#1095 U3 (2026-10-16): the sparse-band support floor drops @@ -720,8 +722,11 @@ def test_packaged_exclusions_load(): # obr.vat is held again as a diagnostic (Vahid's review of #1383, 10). # microcosm#1359 adds the five OBR excise rows, measured at FY2024-25. # The next policyengine-uk bump (2.162.3) holds obr.domestic_rates once it - # compiles (María's ruling of 2026-10-25). - assert len(names) == len(set(names)) == 40 + # compiles (María's ruling of 2026-10-25). microcosm#1095 holds the three + # OBR council tax nation rows, pinned to the UK as measured diagnostics + # (ruling D14e), and SLC's Scottish and Northern Irish repayment rows + # (ruling R4: Wales only binds). + assert len(names) == len(set(names)) == 45 rehold = [entry for entry in exclusions if "_1_000_000_to_inf" in entry["name"]] assert {(e["approved_on"], e["expires_on"], e["tracking"]) for e in rehold} == { ("2026-10-23", "2027-01-23", "microcosm#1095") From 4934fe76eaca1111592dfdb3bc68dc3e216df9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 16:11:11 +0000 Subject: [PATCH 21/39] Sign the matched-period hold for SLC's three nation rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit microcosm#1095 R4. ae1edf70f split SLC's devolved repayments into one row per nation; each resolves SLC's 2024-25 outturn, the latest each nation publishes, at the 2025 target period and measures the frame's own year (measurement_period 2024). The compile needs a signed matched_period hold for that, and test_every_committed_hold_is_signed refuses a proposed one, so the hold waited for María's signature. She signed it on 2026-10-29 (approved_by juaristi22, expires 2027-01-29). The shared regeneration can now compile the three rows. Co-Authored-By: Claude Opus 5.5 --- ...k-slc-devolved-repayments-by-nation.changed.md | 2 +- .../src/microcosm/build/uk/uprating_holds.json | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md index 4351f014b6..be3bca32fa 100644 --- a/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md +++ b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md @@ -1 +1 @@ -SLC's devolved student loan repayments are one row per nation, `slc.repayments.wales_total`, `slc.repayments.scotland_total` and `slc.repayments.northern_ireland_total`, each declaring its nation's geography in its selector, in place of one devolved row that compiled no fact at the Great Britain pin (microcosm#1095 R4). Each measures the frame's own year against SLC's 2024-25 outturn. Wales binds; Scotland and Northern Ireland are held as diagnostics until their borrowers' own plan thresholds are modelled (María's ruling of 2026-10-29). +SLC's devolved student loan repayments are one row per nation, `slc.repayments.wales_total`, `slc.repayments.scotland_total` and `slc.repayments.northern_ireland_total`, each declaring its nation's geography in its selector, in place of one devolved row that compiled no fact at the Great Britain pin (microcosm#1095 R4). Each measures the frame's own year against SLC's 2024-25 outturn, under a signed matched-period hold. Wales binds; Scotland and Northern Ireland are held as diagnostics until their borrowers' own plan thresholds are modelled (María's ruling of 2026-10-29). diff --git a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json index 7843b06859..85e9be3b17 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json @@ -360,6 +360,21 @@ "status": "approved", "expires_on": "2026-12-15" }, + { + "scope": "national", + "kind": "matched_period", + "target_ids": [ + "slc.repayments.wales_total", + "slc.repayments.scotland_total", + "slc.repayments.northern_ireland_total" + ], + "reason": "SLC's net student loan repayments for Wales, Scotland and Northern Ireland, financial year 2024-25, the latest each nation publishes. Each binding declares the frame's own year (measurement_period 2024), so the outturn is measured on the year it was published for, not carried to 2025 by an index (microcosm#1095 R4).", + "tracking": "microcosm#1095", + "approved_by": "juaristi22", + "approved_on": "2026-10-29", + "status": "approved", + "expires_on": "2027-01-29" + }, { "scope": "local", "kind": "control_rescaled", From 5a944e44971201ddfdc1a5a6db90a5371d42ef08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 29 Oct 2026 16:59:59 +0000 Subject: [PATCH 22/39] Move every UK disclosure floor from ten source households to three MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit María's ruling of 2026-10-29 on microcosm#1095 (A1): "move everything to 3". CD171's absolute floor is three; the build used ten, CD171's working minimum against secondary disclosure across outputs. Her ~/.claude/CLAUDE.md now sets three for what people read too. - receipt_counts gains UK_DISCLOSURE_FLOOR (3), UK_WITHHELD ("<3") and UK_BELOW_TEN_BAND ("3-9"). small_cell_share withholds one or two records; support_band and extreme_count print "<3" and "3-9" below ten; rounded_count prints three to nine exactly. - Every stage receipt that withheld on fewer than ten sources now withholds on fewer than three, through the shared names: annual income, the apprentice draw, Carer's Allowance, the Move to UC and UC take-up draws, pension coherence, property purchases, the SPI band mean, the NTS fare mix, the gambling fits, the high-value home gates and the single years of age (diagnostics.UK_DIAGNOSTIC_MIN_SOURCE_HOUSEHOLDS). stage_health reads the new label and bands, and its detail key becomes regions_rewritten_under_floor. - Tools: the private-rent receipt (its output key becomes cells_under_floor_source_households), the childcare realised take-up report and, through the diagnostics constant, the council tax liability comparison. - Kept on purpose: the zero-support floor (1); local_small_cell_rule.json, whose three signed rules defer published cells too small to fit, not survey cells, so they need no re-signing; the private-rent tool's ten-row group rule (no summary describes one district); and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. - Six gate notes and four stage notes state the new floor; the battery and spine-part digests, the coverage manifest's source digest and the charter-H2 fixture's data bundle follow (its graph is unchanged). - About 86 test expectations across 21 files: a withholding test keeps its purpose on one or two sources and expects "<3"; an incidental "<10" now reads the exact figure, "<3" or "3-9". 1,270 tests across the touched files, the gate and contract pins and the coverage manifest pass; the charter-H2 parity test passes. Co-Authored-By: Claude Opus 5.5 --- .../1095-uk-disclosure-floor-three.changed.md | 1 + .../src/microcosm/build/uk/gates.json | 12 +- .../uk/release_input_coverage_manifest.json | 44 +++---- .../src/microcosm/build/uk/source_stages.json | 8 +- .../src/microcosm/build/uk/spec/sources.yaml | 8 +- .../uk_runtime/carers_allowance_take_up.py | 22 ++-- .../microcosm/build/uk_runtime/diagnostics.py | 12 +- .../build/uk_runtime/frs_annual_income.py | 31 +++-- .../build/uk_runtime/frs_person_draws.py | 27 ++-- .../microcosm/build/uk_runtime/frs_take_up.py | 2 +- .../uk_runtime/gambling_participation.py | 5 +- .../build/uk_runtime/high_value_home_gates.py | 10 +- .../build/uk_runtime/lcfs_consumption.py | 10 +- .../uk_runtime/legacy_closure_take_up.py | 24 ++-- .../build/uk_runtime/nts_bus_travel.py | 18 +-- .../build/uk_runtime/pension_coherence.py | 15 ++- .../build/uk_runtime/property_purchases.py | 24 ++-- .../build/uk_runtime/receipt_counts.py | 58 +++++--- .../build/uk_runtime/salary_sacrifice.py | 2 +- .../build/uk_runtime/single_year_ages.py | 6 +- .../microcosm/build/uk_runtime/spi_income.py | 11 +- .../build/uk_runtime/stage_health.py | 62 +++++---- .../microcosm/build/uk_runtime/uc_take_up.py | 12 +- .../engine_free/uk/test_uk_apprentice_draw.py | 34 ++--- .../uk/test_uk_carers_allowance_take_up.py | 46 ++++--- .../uk/test_uk_childcare_realised_take_up.py | 6 +- .../uk/test_uk_council_tax_liability_tool.py | 14 +- .../tests/engine_free/uk/test_uk_etb_vat.py | 6 +- .../uk/test_uk_frs_annual_income.py | 16 ++- .../uk/test_uk_gambling_participation.py | 8 +- .../uk/test_uk_high_value_home_gates.py | 49 +++---- .../uk/test_uk_lcfs_consumption.py | 124 +++++++++--------- .../uk/test_uk_legacy_closure_take_up.py | 61 +++++---- .../engine_free/uk/test_uk_nts_bus_travel.py | 6 +- .../uk/test_uk_pension_coherence.py | 10 +- .../uk/test_uk_private_rent_receipt_tool.py | 119 +++++++++-------- .../uk/test_uk_property_purchases.py | 77 ++++++----- .../engine_free/uk/test_uk_receipt_counts.py | 28 +++- .../uk/test_uk_regional_home_values.py | 9 +- .../uk/test_uk_salary_sacrifice.py | 7 +- .../uk/test_uk_single_year_ages.py | 17 ++- .../engine_free/uk/test_uk_spi_band_donors.py | 4 +- .../engine_free/uk/test_uk_stage_health.py | 56 ++++---- .../engine_free/uk/test_uk_take_up_gate.py | 4 +- .../engine_free/uk/test_uk_uc_take_up.py | 59 +++++---- .../src/microcosm/data/contract.py | 6 +- .../tests/engine_free/shared/test_contract.py | 4 +- .../parity/uk_spine/sources/fixture.json | 8 +- tools/measure_uk_spi_half_coherence.py | 3 + tools/report_uk_childcare_realised_take_up.py | 7 +- tools/report_uk_single_year_ages.py | 4 +- tools/uk_private_rent_receipt.py | 56 ++++---- 52 files changed, 710 insertions(+), 562 deletions(-) create mode 100644 changelog.d/1095-uk-disclosure-floor-three.changed.md diff --git a/changelog.d/1095-uk-disclosure-floor-three.changed.md b/changelog.d/1095-uk-disclosure-floor-three.changed.md new file mode 100644 index 0000000000..c2c52ad05a --- /dev/null +++ b/changelog.d/1095-uk-disclosure-floor-three.changed.md @@ -0,0 +1 @@ +UK stage receipts, stage-health gates and report tools withhold a figure only when it rests on one or two distinct source households (CD171's absolute floor), not on fewer than ten (María's ruling of 2026-10-29, microcosm#1095). One constant, `receipt_counts.UK_DISCLOSURE_FLOOR`, sets the floor. A withheld figure reads `"<3"`. Support and extreme counts gain a `"3-9"` band, and rounded record counts print three to nine exactly. The statistical floors stay: the zero-support floor, donor-cell minimums, the private-rent tool's ten-row group rule, and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index 456ec4a18d..e3bf893b4b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -542,7 +542,7 @@ ], "minimum_observed_pay_share": 0.7 }, - "notes": "Stage-time gate over the annual income descriptors' receipt: every share lies in [0, 1], no other-spell amount is negative and every full-year earner keeps the whole year, exactly; the usual-to-DV pay ratio the stage measures lies in [0.95, 1.10]; annual employee earners are between one and 1.15 times current ones (the survey's spells add part-year earners and cannot remove a current one); and, where ten or more households carry it, at least 0.7 of the pay outside the current job is observed rather than drawn from a donor." + "notes": "Stage-time gate over the annual income descriptors' receipt: every share lies in [0, 1], no other-spell amount is negative and every full-year earner keeps the whole year, exactly; the usual-to-DV pay ratio the stage measures lies in [0.95, 1.10]; annual employee earners are between one and 1.15 times current ones (the survey's spells add part-year earners and cannot remove a current one); and, where three or more households carry it, at least 0.7 of the pay outside the current job is observed rather than drawn from a donor." }, { "id": "uk_stage_spi_support_channel_mass", @@ -898,7 +898,7 @@ "all_households" ] }, - "notes": "Stage-time gate over the Move to UC take-up receipt (microcosm#1308, gated with the next policyengine-uk bump on María's ruling of 2026-10-17). The receipt withholds what a thin combination realizes, so the gate holds the contract it can read: the share is measured at the spine's design weights over Great Britain, every combination's rate is a probability taken from its combination or from all households, its support is a printed band, its unreachable flag is a boolean, a withheld \"<10\" or absent, and the share claiming at closure is a share or withheld." + "notes": "Stage-time gate over the Move to UC take-up receipt (microcosm#1308, gated with the next policyengine-uk bump on María's ruling of 2026-10-17). The receipt withholds what a thin combination realizes, so the gate holds the contract it can read: the share is measured at the spine's design weights over Great Britain, every combination's rate is a probability taken from its combination or from all households, its support is a printed band, its unreachable flag is a boolean, a withheld \"<3\" or absent, and the share claiming at closure is a share or withheld." }, { "id": "uk_stage_frs_person_draws_apprentices", @@ -914,7 +914,7 @@ "maximum_relative_realization_deviation": 0.05, "maximum_implied_relief": 370000000.0 }, - "notes": "Stage-time gate over the is_apprentice receipt (microcosm#1373). The draw's target is the contract's apprentice_stock_19_to_24 for the build year (DfE's England apprentices in learning at the start of the academic year, participation less starts, per head aged 19 to 24) times the weighted population aged 21 to 24 at the stage's weights, and eligible employees aged 21 to 24 are flagged in the order of their identity-keyed uniform until their weight is nearest it, so the stage misses it by at most half one person's weight. The gate checks that the receipt carries the contract's rate under the declared key, that its target is that rate times its population, that its support is printed in bands, and, unless the eligible employees weigh no more than the target (cap-bound, every one of them flagged), that the flagged weight lies within maximum_relative_realization_deviation (5 percent) of the target. That tolerance is a declared rule set above the half-weight bound, not a fact. A figure resting on fewer than ten source households, which the receipt withholds under the UKDS disclosure rule and prints \"<10\", is named unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). The receipt also records the relief the flags imply at the installed engine's own Class 1 schedule for the build year (on a 2024 frame, 13.8 percent between GBP 9,100 and GBP 50,270), with each flagged employee's pay standing in for NIC earnings, and the gate holds it at or below maximum_implied_relief: GBP 370m, HMRC's NIC - NS1 for 2024-25 (tax relief statistics, January 2026, Table 2), which covers every apprentice under 25, under-21s included, since the apprentice relief takes precedence (Vahid's review of microcosm#1373, S1). It is a ceiling, not a target. The stage refuses an installed engine without the s.9B threshold or without policyengine-uk#2683's split of the apprentice minimum wage from the flag. The entry is a population_fact_check, so the synthetic smoke build over the H2 fixture records its outcome without blocking; every licensed build blocks on it." + "notes": "Stage-time gate over the is_apprentice receipt (microcosm#1373). The draw's target is the contract's apprentice_stock_19_to_24 for the build year (DfE's England apprentices in learning at the start of the academic year, participation less starts, per head aged 19 to 24) times the weighted population aged 21 to 24 at the stage's weights, and eligible employees aged 21 to 24 are flagged in the order of their identity-keyed uniform until their weight is nearest it, so the stage misses it by at most half one person's weight. The gate checks that the receipt carries the contract's rate under the declared key, that its target is that rate times its population, that its support is printed in bands, and, unless the eligible employees weigh no more than the target (cap-bound, every one of them flagged), that the flagged weight lies within maximum_relative_realization_deviation (5 percent) of the target. That tolerance is a declared rule set above the half-weight bound, not a fact. A figure resting on fewer than three source households, which the receipt withholds under the UKDS disclosure rule and prints \"<3\", is named unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). The receipt also records the relief the flags imply at the installed engine's own Class 1 schedule for the build year (on a 2024 frame, 13.8 percent between GBP 9,100 and GBP 50,270), with each flagged employee's pay standing in for NIC earnings, and the gate holds it at or below maximum_implied_relief: GBP 370m, HMRC's NIC - NS1 for 2024-25 (tax relief statistics, January 2026, Table 2), which covers every apprentice under 25, under-21s included, since the apprentice relief takes precedence (Vahid's review of microcosm#1373, S1). It is a ceiling, not a target. The stage refuses an installed engine without the s.9B threshold or without policyengine-uk#2683's split of the apprentice minimum wage from the flag. The entry is a population_fact_check, so the synthetic smoke build over the H2 fixture records its outcome without blocking; every licensed build blocks on it." }, { "id": "uk_stage_frs_take_up_signal", @@ -937,7 +937,7 @@ "person.max_free_entitlement_hours_used" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the six flags frs_take_up draws that the terminal uk_take_up_signal gate measures (Tax-Free Childcare, the extended, universal and targeted hours, the Universal Credit childcare element and the under-2 usage of the extended hours) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage, whose population is the children under 2 in units that claim the extended hours), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the six flags frs_take_up draws that the terminal uk_take_up_signal gate measures (Tax-Free Childcare, the extended, universal and targeted hours, the Universal Credit childcare element and the under-2 usage of the extended hours) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage, whose population is the children under 2 in units that claim the extended hours), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_frs_person_draws_take_up_signal", @@ -955,7 +955,7 @@ "person.would_claim_scp" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the Marriage Allowance and Scottish Child Payment flags frs_person_draws draws are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; the Scottish Child Payment target is the weighted mean of its under-6 and 6-plus rates). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the Marriage Allowance and Scottish Child Payment flags frs_person_draws draws are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; the Scottish Child Payment target is the weighted mean of its under-6 and 6-plus rates). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_frs_household_draws_take_up_signal", @@ -975,7 +975,7 @@ "household.property_purchased" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the four flags frs_household_draws draws (TV ownership, TV licence evasion, the first-home flag and the main-residence purchase flag) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than ten source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the four flags frs_household_draws draws (TV ownership, TV licence evasion, the first-home flag and the main-residence purchase flag) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_release_input_coverage", diff --git a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json index 33767802a2..d49528355f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json @@ -470,7 +470,7 @@ "required_mass_change_reason": "Capital-gains incidence anchor moves the mass of non-liable clone households back to their paired originals until the sub-exempt and loss-making clone mass match the Advani-Summers reporter composition at the redrawn liable mass; every pair's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, the HMRC Table 3 redrawn gains on the spine and Advani-Summers capital-gains incidence" @@ -493,7 +493,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, and Advani-Summers capital-gains incidence" @@ -516,7 +516,7 @@ "required_mass_change_reason": "Capital-gains residential split divides every household carrying liable gainers into arms weighted by the solved residential probabilities, one arm per subset of residential gainers; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) on the amounts the Table 3 redraw placed" @@ -538,7 +538,7 @@ "required_mass_change_reason": "Capital-gains support split divides the wealthiest households of each HMRC Table 3 income band into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 3 for 2024-25, via the vendored conditioning facts", "survey": "Family Resources Survey 2024-25, SPI synthetic support and HMRC Capital Gains Tax statistics Table 3 (2024-25 individuals by size of gain and taxable income)" @@ -567,7 +567,7 @@ "required_mass_change_reason": "ETB public-services imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab, DfT rail fare index, and public NHS activity/cost table.", "survey": "Effects of Taxes and Benefits 1977-2024 and NHS age-gender public table" @@ -587,7 +587,7 @@ "required_mass_change_reason": "ETB VAT expenditure-rate imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource.", "survey": "Effects of Taxes and Benefits 1977-2024" @@ -609,7 +609,7 @@ "required_mass_change_reason": "High-value home support divides every owner household in the top value stratum of its region into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Microcosm structural operator (microcosm#1240 fix 1); no publisher input", "survey": "Family Resources Survey 2024-25 and SPI synthetic support, after the WAS wealth draw and the regional property uprating" @@ -630,7 +630,7 @@ "required_mass_change_reason": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative), Table 4.1 (individuals claiming Business Asset Disposal Relief or Investors' Relief by band of qualifying gain, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" @@ -654,7 +654,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", "conditioning_resource_sha256": "e54cdad4cfe4498bfddb329d6b0aef468ea542a55c1970df574859626a3d19d3", @@ -744,7 +744,7 @@ "full_frs_tei_band_unavailable" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "hmrc_surface": "2023-24", "mapped_build_period": "2024", @@ -812,7 +812,7 @@ "required_mass_change_reason": "LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", "survey": "Living Costs and Food Survey 2024-25" @@ -838,7 +838,7 @@ "required_mass_change_reason": "NTS bus-travel imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Department for Transport National Travel Survey, UK Data Service SN 5340 (End User Licence, 19th edition, November 2025), DOI 10.5255/UKDA-SN-5340-19; local licensed tab files (household, individual, trip); England residents only from 2013.", "survey": "National Travel Survey 2002-2024" @@ -858,7 +858,7 @@ "required_mass_change_reason": "Private-school attendance stored on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "policyengine-uk attends_private_school (the gov.simulation.private_school_vat attendance rates and factor), evaluated by the pinned engine", "survey": "policyengine-uk private-school attendance imputation, stored at the spine's weights" @@ -881,7 +881,7 @@ "property_finance_costs" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "https://www.gov.uk/government/statistics/property-rental-income-statistics", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)" @@ -902,7 +902,7 @@ "required_mass_change_reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics", "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b" @@ -925,7 +925,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations", "survey": "HM Land Registry Price Paid latest sales uprated with the UK House Price Index, owner-weighted by region (the dense value node's knots, region level)" @@ -949,7 +949,7 @@ "non_residential_property_value" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "MHCLG dwellings and the UK House Price Index regional average price averaged over the twelve months of calendar 2024 from the July 2026 full file, the frame's valuation basis, so the engine's annual uprating from 2024 projects the value once (microcosm#1240 fix 5).", "survey": "Public regional property reference" @@ -977,7 +977,7 @@ "employment_income" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "HMRC, Salary sacrifice reform for pension contributions effective from 6 April 2029", "survey": "Family Resources Survey 2024-25 salary-sacrifice respondents and HMRC salary-sacrifice reform analysis" @@ -1010,7 +1010,7 @@ "household_source_id" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Reserved SPI support households for the HMRC Table 2.5 total-income bands from GBP 200,000, stacked at the published band taxpayer count over the donors per band (PolicyEngine/chronicle#280 lane).", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Income Tax liabilities statistics July 2026 Table 2.5" @@ -1032,7 +1032,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Explore Education Statistics Table 6a, Higher education total", "survey": "Family Resources Survey 2024-25 and Student Loans Company borrower forecasts for England" @@ -1054,7 +1054,7 @@ "required_mass_change_reason": "WAS Lifetime ISA imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "Wealth and Assets Survey round 8" @@ -1093,7 +1093,7 @@ "required_mass_change_reason": "WAS wealth imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "829b1a173b2323fbb3e5b2d0ddfaa617b660c33683d6f6caab96c56c06c71280", + "source_manifest_sha256": "41dc6fa5ceb14d1dc0e0e4fb271e79e23e454793ca6080d9e0ee87634900ffa0", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed 2006-22 household tab.", "survey": "Wealth and Assets Survey round 8" diff --git a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json index f01e32f918..088593511e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -1586,7 +1586,7 @@ "contributory_benefits_annual_share" ], "rewrites": [], - "notes": "Describes each FRS adult's 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today's employee pay and annual pay from other spells (chiefly a recent leaver's last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk's months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver's pay is the last job's usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor's weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar's self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source's support as a band of distinct households, ratios only where ten or more households carry them, and the exact zeros its stage gate reads." + "notes": "Describes each FRS adult's 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today's employee pay and annual pay from other spells (chiefly a recent leaver's last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk's months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver's pay is the last job's usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor's weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar's self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source's support as a band of distinct households, ratios only where three or more households carry them, and the exact zeros its stage gate reads." }, { "stage": "spi_support_channel", @@ -3999,7 +3999,7 @@ "local_bus_trips", "household_local_bus_trips" ], - "notes": "Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, María's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's £2 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the £3 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the £3 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 10 unweighted boardings or 10 distinct households, or whose complement does, reads <10. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed." + "notes": "Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, María's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's £2 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the £3 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the £3 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 3 unweighted boardings or 3 distinct households, or whose complement does, reads <3. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed." }, { "stage": "lcfs_consumption", @@ -6154,7 +6154,7 @@ "rewrites": [ "would_claim_uc" ], - "notes": "Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract's one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine's design weights that put the caseload above DWP's for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP's caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release's calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit's identity and region), so after the benefit cap and deductions, the award the registry's dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration's family type reads; all are consumed only. A unit with an award falls into a cell of DWP's family type by DWP's GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up's age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP's count for the pool's bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up's rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain's at the stage's household weights, which DWP's counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit's weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland's drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP's count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool's DWP count, its support in bands of distinct source households and its unreachable flag (only where ten or more sources carry the pool), and each family type's weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant's or partner's income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869)." + "notes": "Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract's one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine's design weights that put the caseload above DWP's for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP's caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release's calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit's identity and region), so after the benefit cap and deductions, the award the registry's dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration's family type reads; all are consumed only. A unit with an award falls into a cell of DWP's family type by DWP's GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up's age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP's count for the pool's bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up's rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain's at the stage's household weights, which DWP's counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit's weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland's drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP's count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool's DWP count, its support in bands of distinct source households and its unreachable flag (only where three or more sources carry the pool), and each family type's weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant's or partner's income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869)." }, { "stage": "uc_legacy_closure_take_up", @@ -6386,7 +6386,7 @@ "rewrites": [ "would_claim_carers_allowance" ], - "notes": "Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source's draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from £151 to £196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer's Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame's own values, gives each person's is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year's parameters at 30 April, so the limit is 2024-25's £151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (María's decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine's gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract's carers_allowance_newly_entitled rate (0.6, María's ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person's identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (María's ruling of 2026-10-23): there the flag is Carer Support Payment's, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year's limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where ten or more carry it and a share only where neither of its sides rests on one to nine; the stage has no health gate." + "notes": "Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source's draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from £151 to £196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer's Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame's own values, gives each person's is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year's parameters at 30 April, so the limit is 2024-25's £151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (María's decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine's gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract's carers_allowance_newly_entitled rate (0.6, María's ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person's identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (María's ruling of 2026-10-23): there the flag is Carer Support Payment's, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year's limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where three or more carry it and a share only where neither of its sides rests on one or two; the stage has no health gate." }, { "stage": "uc_deduction_attributes", diff --git a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml index 889606bb5d..2f0e00caa4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -1382,7 +1382,7 @@ stages: - private_pension_income_annual_share - contributory_benefits_annual_share rewrites: [] - notes: 'Describes each FRS adult''s 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today''s employee pay and annual pay from other spells (chiefly a recent leaver''s last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk''s months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver''s pay is the last job''s usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor''s weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar''s self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source''s support as a band of distinct households, ratios only where ten or more households carry them, and the exact zeros its stage gate reads.' + notes: 'Describes each FRS adult''s 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today''s employee pay and annual pay from other spells (chiefly a recent leaver''s last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk''s months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver''s pay is the last job''s usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor''s weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar''s self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source''s support as a band of distinct households, ratios only where three or more households carry them, and the exact zeros its stage gate reads.' - stage: spi_support_channel survey: Family Resources Survey 2024-25 source: Synthetic SPI support channel sampled uniformly without replacement from the raw FRS spine before cloning. @@ -3319,7 +3319,7 @@ stages: - other_local_bus_trips - local_bus_trips - household_local_bus_trips - notes: Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, María's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's £2 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the £3 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the £3 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 10 unweighted boardings or 10 distinct households, or whose complement does, reads <10. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed. + notes: Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, María's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's £2 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the £3 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the £3 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 3 unweighted boardings or 3 distinct households, or whose complement does, reads <3. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed. - stage: lcfs_consumption survey: Living Costs and Food Survey 2024-25 source: UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices. @@ -4966,7 +4966,7 @@ stages: outputs: [] rewrites: - would_claim_uc - notes: 'Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract''s one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine''s design weights that put the caseload above DWP''s for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP''s caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release''s calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit''s identity and region), so after the benefit cap and deductions, the award the registry''s dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration''s family type reads; all are consumed only. A unit with an award falls into a cell of DWP''s family type by DWP''s GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up''s age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP''s count for the pool''s bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up''s rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain''s at the stage''s household weights, which DWP''s counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit''s weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland''s drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP''s count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool''s DWP count, its support in bands of distinct source households and its unreachable flag (only where ten or more sources carry the pool), and each family type''s weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant''s or partner''s income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869).' + notes: 'Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract''s one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine''s design weights that put the caseload above DWP''s for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP''s caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release''s calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit''s identity and region), so after the benefit cap and deductions, the award the registry''s dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration''s family type reads; all are consumed only. A unit with an award falls into a cell of DWP''s family type by DWP''s GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up''s age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP''s count for the pool''s bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up''s rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain''s at the stage''s household weights, which DWP''s counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit''s weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland''s drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP''s count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool''s DWP count, its support in bands of distinct source households and its unreachable flag (only where three or more sources carry the pool), and each family type''s weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant''s or partner''s income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869).' - stage: uc_legacy_closure_take_up survey: DWP Stat-Xplore, Households invited to Move to Universal Credit by legacy benefit and move status, notices July 2022 to June 2026 source: https://stat-xplore.dwp.gov.uk @@ -5136,7 +5136,7 @@ stages: outputs: [] rewrites: - would_claim_carers_allowance - notes: 'Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source''s draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from £151 to £196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer''s Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame''s own values, gives each person''s is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year''s parameters at 30 April, so the limit is 2024-25''s £151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (María''s decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine''s gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract''s carers_allowance_newly_entitled rate (0.6, María''s ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person''s identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (María''s ruling of 2026-10-23): there the flag is Carer Support Payment''s, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors'' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year''s limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where ten or more carry it and a share only where neither of its sides rests on one to nine; the stage has no health gate.' + notes: 'Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source''s draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from £151 to £196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer''s Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame''s own values, gives each person''s is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year''s parameters at 30 April, so the limit is 2024-25''s £151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (María''s decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine''s gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract''s carers_allowance_newly_entitled rate (0.6, María''s ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person''s identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (María''s ruling of 2026-10-23): there the flag is Carer Support Payment''s, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors'' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year''s limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where three or more carry it and a share only where neither of its sides rests on one or two; the stage has no health gate.' - stage: uc_deduction_attributes survey: DWP Universal Credit deductions statistics, March 2025 to February 2026 source: Department for Work and Pensions supplementary Tables 2, 5 and 6, sha-pinned by Chronicle package dwp-uc-deductions-march-2025-february-2026. diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/carers_allowance_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/carers_allowance_take_up.py index ef45867517..5209ae176a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/carers_allowance_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/carers_allowance_take_up.py @@ -55,8 +55,8 @@ keyed on lineage so that the CGT clones keep their source's draw. The receipt is aggregate-only (UKDS disclosure control): support as bands of -distinct source households, a weighted total only where ten or more carry -it, and a share only where neither of its sides rests on one to nine. +distinct source households, a weighted total only where three or more carry +it, and a share only where neither of its sides rests on one or two. """ from __future__ import annotations @@ -78,6 +78,8 @@ validate_uk_national_frame, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_count, small_cell_share, source_household_ids, @@ -471,21 +473,21 @@ def redraw_carers_allowance_take_up( source_ids = person_households.map(household_sources).to_numpy() - # Weighted aggregates only; a figure one to nine source households carry - # is "<10" (UKDS disclosure control). + # Weighted aggregates only; a figure one or two source households carry + # is "<3" (UKDS disclosure control). def sources(mask: np.ndarray) -> int: return distinct_count(source_ids, mask, weights) def guarded_share(part: np.ndarray, whole: np.ndarray) -> float | str | None: # The share times the whole's weight gives back either side, so a - # share is given only where neither side rests on one to nine sources; + # share is given only where neither side rests on one or two sources; # the part's weight is never given beside the whole's for the same # reason. whole_weight = float(weights[whole].sum()) if not whole_weight: return None - if 0 < min(sources(part & whole), sources(whole & ~part)) < 10: - return "<10" + if 0 < min(sources(part & whole), sources(whole & ~part)) < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD return small_cell_share( float(weights[part & whole].sum()) / whole_weight, sources(whole) ) @@ -522,9 +524,11 @@ def weighted(mask: np.ndarray) -> float | str: # each split by where the hours are given. "over_limit_carers_support": support_band(sources(over_limit)), # Beside the eligible weight, it would give back the weight the pool - # leaves out, so it is withheld where that rests on one to nine. + # leaves out, so it is withheld where that rests on one or two. "over_limit_carers_weighted_persons": ( - "<10" if 0 < sources(over_limit & ~eligible) < 10 else weighted(over_limit) + UK_WITHHELD + if 0 < sources(over_limit & ~eligible) < UK_DISCLOSURE_FLOOR + else weighted(over_limit) ), "over_limit_in_household_support": support_band( sources(over_limit & pool.in_household) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py index 861c6d1663..c4a95dc6b5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py @@ -25,6 +25,7 @@ import pandas as pd from pydantic import ValidationError +from microcosm.build.uk_runtime.receipt_counts import UK_DISCLOSURE_FLOOR from microcosm.calibrate import ( TargetRegistry, diagnostics_payload, @@ -68,11 +69,12 @@ _TARGET_PASS_RELATIVE_ERROR = 0.10 _AREA_FIT_LIMIT = 15 #: The fewest distinct source households a published cell may rest on (UKDS -#: CD137 clause 8). The build no longer withholds model figures (María's -#: ruling of 2026-10-26), but the report tools that publish their own tables, -#: such as the single years of age and the council tax liability comparison, -#: still suppress the cells below it. -UK_DIAGNOSTIC_MIN_SOURCE_HOUSEHOLDS = 10 +#: CD137 clause 8; the build's floor, ``receipt_counts.UK_DISCLOSURE_FLOOR``, +#: three since María's ruling of 2026-10-29). The build no longer withholds +#: model figures (her ruling of 2026-10-26), but the report tools that publish +#: their own tables, such as the single years of age and the council tax +#: liability comparison, still suppress the cells below it. +UK_DIAGNOSTIC_MIN_SOURCE_HOUSEHOLDS = UK_DISCLOSURE_FLOOR _COUNTRY_BY_AREA_PREFIX = { "E": "England", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py index 203b00ae48..dc3658f858 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py @@ -111,7 +111,7 @@ The receipt is build output and follows UKDS disclosure control (:mod:`receipt_counts`): every cell gives its support as a band of distinct -source households, and a weighted figure only where ten or more carry it. +source households, and a weighted figure only where three or more carry it. """ from __future__ import annotations @@ -141,6 +141,8 @@ validate_uk_national_frame, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_carriers, extreme_count, small_cell_share, @@ -796,8 +798,8 @@ def pay_concept_ratio( dv = _numeric(jobs, "ugrspay") support = distinct_carriers(jobs["household_id"].to_numpy(), job_weights) denominator = float(np.nansum(job_weights * usual)) - # Fewer than ten reporting households only flags: the receipt prints the - # ratio "<10" and the gate reads it unmeasured, since a small-cell rule + # Fewer than three reporting households only flags: the receipt prints the + # ratio "<3" and the gate reads it unmeasured, since a small-cell rule # never stops a build (María's ruling of 2026-10-26). if support == 0 or denominator <= 0: raise ValueError( @@ -928,12 +930,14 @@ def weighted(values: np.ndarray, mask: np.ndarray) -> float | str: } # Structural checks the stage gate reads: each is zero by construction, # and a count of rows that break one is banded as the other stages band - # theirs (zero exact), so a failing build never records 1 to 9. + # theirs (zero exact), so a failing build never records a small count. full_year = source == SOURCE_FULL_YEAR return { "window_months": WINDOW_MONTHS, "weights": "household weights at the stage, carried by each person", - "pay_concept_ratio": ratio if ratio_support >= 10 else "<10", + "pay_concept_ratio": ( + ratio if ratio_support >= UK_DISCLOSURE_FLOOR else UK_WITHHELD + ), "pay_concept_ratio_support": support_band(ratio_support), "earnings_growth": float(earnings_growth), "spell_sources": sources, @@ -941,23 +945,24 @@ def weighted(values: np.ndarray, mask: np.ndarray) -> float | str: "annual_employee_earners": weighted(np.ones(len(pay)), annual_earner), "current_employee_earners": weighted(np.ones(len(pay)), pay), "annual_over_current_earners": ( - "<10" - if carriers(annual_earner) < 10 or carriers(pay) < 10 + UK_WITHHELD + if carriers(annual_earner) < UK_DISCLOSURE_FLOOR + or carriers(pay) < UK_DISCLOSURE_FLOOR else float(weights[annual_earner].sum()) / float(weights[pay].sum()) ), "annual_over_current_employment_income": ( float((weights * annual).sum()) / float((weights * current).sum()) - if carriers(pay) >= 10 - else "<10" + if carriers(pay) >= UK_DISCLOSURE_FLOOR + else UK_WITHHELD ), "annual_over_current_self_employment_income": ( float((weights * se_annual).sum()) / float((weights * se_current).sum()) - if carriers(se_current > 0) >= 10 - else "<10" + if carriers(se_current > 0) >= UK_DISCLOSURE_FLOOR + else UK_WITHHELD ), "other_spells_pay_observed_share": ( - "<10" - if carriers(outside) < 10 + UK_WITHHELD + if carriers(outside) < UK_DISCLOSURE_FLOOR else float(weights[outside & observed].sum()) / float(weights[outside].sum()) ), diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py index 4a499fd0aa..e8f8b11cb0 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_person_draws.py @@ -55,7 +55,12 @@ uk_time_period, validate_uk_national_frame, ) -from microcosm.build.uk_runtime.receipt_counts import distinct_count, support_band +from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, + distinct_count, + support_band, +) from microcosm.build.uk_runtime.take_up_contract import UKTakeUpContract from microcosm.frame import Frame @@ -335,13 +340,17 @@ def derive_is_apprentice( "realized_mass": realized, "realization_deviation": realized - target, } - # A weighted total carried by one to nine households is withheld, with the + # A weighted total carried by one or two households is withheld, with the # figures that would give it back: the target is the rate times the # population, and the deviation is the flagged weight less the target. - if 0 < population_support < 10: - receipt.update(population_mass="<10", target="<10", realization_deviation="<10") - if 0 < eligible_support < 10: - receipt["eligible_mass"] = "<10" + if 0 < population_support < UK_DISCLOSURE_FLOOR: + receipt.update( + population_mass=UK_WITHHELD, + target=UK_WITHHELD, + realization_deviation=UK_WITHHELD, + ) + if 0 < eligible_support < UK_DISCLOSURE_FLOOR: + receipt["eligible_mass"] = UK_WITHHELD if relief_schedule is not None and "employment_income" in person.columns: pay = pd.to_numeric(person["employment_income"], errors="coerce") relieved = np.clip( @@ -357,10 +366,10 @@ def derive_is_apprentice( receipt["implied_relief"] = float( relief_schedule["rate"] * (weights[flags] * relieved[flags]).sum() ) - if 0 < flagged_support < 10: - receipt.update(realized_mass="<10", realization_deviation="<10") + if 0 < flagged_support < UK_DISCLOSURE_FLOOR: + receipt.update(realized_mass=UK_WITHHELD, realization_deviation=UK_WITHHELD) if "implied_relief" in receipt: - receipt["implied_relief"] = "<10" + receipt["implied_relief"] = UK_WITHHELD return UKApprenticeDraw(flags=flags, receipt=receipt) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py index 228132fbab..04616bd478 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py @@ -809,7 +809,7 @@ def uk_take_up_signal_receipt( calibrated weights; a stage gate reads this receipt so that a draw defect fails where it is drawn, apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). The receipt is aggregate-only (UKDS disclosure - control): a share or a target is given only where ten or more source + control): a share or a target is given only where three or more source households carry the flag's population, whose support is a band. """ diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py index 3ca491273e..61dd8a1153 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py @@ -52,6 +52,7 @@ from microcosm.build.uk_runtime.energy_pricing import _connect_walk from microcosm.build.uk_runtime.ledger_fact_vendoring import vendored_rows from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, distinct_count, extreme_count, rounded_count, @@ -83,7 +84,7 @@ ) #: The fewest distinct source households a receipt cell may rest on (CD171 #: section 5.2.1). -SMALL_CELL = 10 +SMALL_CELL = UK_DISCLOSURE_FLOOR #: The fewest donor households on each side of a key the propensity fit #: needs: its held-out validation split is stratified by the key. _FIT_MINIMUM = 2 @@ -631,7 +632,7 @@ def top_up_gambling_participation( The receipt gives, per key, the targets and the shares before and after, nationally and per stratum, the share of the key's stakes each class carries and the fits' donor support as a band: shares only, and a - group's figures only where every cell under them rests on ten or more + group's figures only where every cell under them rests on three or more source households. """ diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py index 7ad5e08ae7..c7e360b13e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py @@ -35,6 +35,11 @@ UKHighValueHomeStockFacts, uk_owner_occupied_mask, ) +from microcosm.build.uk_runtime.receipt_counts import ( + UK_BELOW_TEN_BAND, + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, +) __all__ = [ "HIGH_VALUE_HOME_SCOPE", @@ -60,7 +65,8 @@ OBR_PERIOD_TYPE = "fiscal_year" _OBR_BAND_IDS = frozenset((*(band_id for _, _, band_id in HVCTS_BANDS_2026), "total")) SUPPORT_BANDS: tuple[tuple[str, int, int], ...] = ( - ("<10", 0, 10), + (UK_WITHHELD, 0, UK_DISCLOSURE_FLOOR), + (UK_BELOW_TEN_BAND, UK_DISCLOSURE_FLOOR, 10), ("10-29", 10, 30), ("30+", 30, 10**9), ) @@ -124,7 +130,7 @@ def _weighted_counts( #: Shipped cells need at least this many distinct source households. -SMALL_CELL_SOURCES = 10 +SMALL_CELL_SOURCES = UK_DISCLOSURE_FLOOR ENGLAND_CODE = "E92000001" diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py index 56da87324c..4eabe2bf74 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py @@ -1250,7 +1250,7 @@ def weighted_top_shares( households lead a larger one's. The floors count the distinct sources that spend anything (``sources``, one per row when omitted: a frame stacks copies of one source household), as every receipt count is (UKDS - disclosure control), and a share is ``"<10"`` when one to nine of them: + disclosure control), and a share is ``"<3"`` when one or two of them: - sit in its top group; - sit outside it, since the receipt's total less the top group's spend gives back theirs; @@ -3914,7 +3914,7 @@ def fuel_flag_evidence( The shares on one side difference into the households with and without a vehicle, crossed with fuel bought or not. So every share on that side - is "<10" when any of those groups that is not empty rests on one to nine + is "<3" when any of those groups that is not empty rests on one or two distinct positive-weight sources: the frame's source households (``sources``, not the copies it stacks of one), the donor's diaries. """ @@ -4079,7 +4079,7 @@ def donor_excise_shares( donors as a band, how many donors the clip at one held, and, where the denominator is lines under a published total, the weighted share of donors whose published total sits beside those lines by more than its - rounding ("<10" when one to nine donors do): a donor stage receipt is + rounding ("<3" when one or two donors do): a donor stage receipt is UKDS output (CD171 §5.2.1), so it gives no donor value and no small count. A share of the stakes an earlier share gives has no published total; its denominator is the stake lines it splits. @@ -4362,8 +4362,8 @@ def donor_energy_split_receipt(household: pd.DataFrame) -> dict[str, Any]: (``clipping_over_fuel_light_and_power``) and what the parts, unclipped, differ from p537 by (``unclipped_over_fuel_light_and_power``), with the weighted share of donors whose unclipped parts differ from their p537 by - more than a penny and by more than 50p a week (``"<10"`` when fewer than - ten donors do). Totals over every donor, at diary prices, and the account + more than a penny and by more than 50p a week (``"<3"`` when fewer than + three donors do). Totals over every donor, at diary prices, and the account identity shares the split checked, floored to two decimals. """ diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/legacy_closure_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/legacy_closure_take_up.py index 499448bebb..58886d1c3f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/legacy_closure_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/legacy_closure_take_up.py @@ -60,6 +60,8 @@ validate_uk_national_frame, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_count, small_cell_share, source_household_ids, @@ -233,8 +235,8 @@ def legacy_closure_claim_probabilities( applies to every unit of the combination. The expected weighted share of Great Britain's drawn units claiming at the closure is ``r`` wherever ``p <= r``. The receipt bands each cohort on its distinct source - households and flags an unreachable rate only where ten or more carry p - and neither of its sides rests on one to nine. + households and flags an unreachable rate only where three or more carry p + and neither of its sides rests on one or two. """ gb = np.asarray(great_britain, dtype=bool) @@ -259,14 +261,14 @@ def count(mask: np.ndarray) -> int: ) # The flag rests on p, so on Great Britain's sources, and says on which - # side of DWP's rate p lies: it is given only where ten or more sources + # side of DWP's rate p lies: it is given only where three or more sources # carry p and neither the units claiming anyway nor the others rest on - # one to nine. A combination with no Great Britain unit has no p. + # one or two. A combination with no Great Britain unit has no p. sides = (count(basis & claims_anyway), count(basis & ~claims_anyway)) if not basis.any(): flag: bool | str | None = None - elif count(basis) < 10 or 0 < min(sides) < 10: - flag = "<10" + elif count(basis) < UK_DISCLOSURE_FLOOR or 0 < min(sides) < UK_DISCLOSURE_FLOOR: + flag = UK_WITHHELD else: flag = bool(p > rate) receipt[str(key)] = { @@ -363,7 +365,7 @@ def assign_uc_claim_at_legacy_closure( validate_uk_national_frame(result) # Great Britain's weighted aggregates only, DWP's universe; a figure one to - # nine source households carry is "<10" (UKDS disclosure control). + # two source households carry is "<3" (UKDS disclosure control). def sources(mask: np.ndarray) -> int: return distinct_count(source_ids, mask, weights) @@ -372,12 +374,14 @@ def sources(mask: np.ndarray) -> int: drawn_weight = float(weights[gb_drawn].sum()) claiming = gb_drawn & flag # The share claiming times the drawn weight gives back either side, so the - # share is given only where neither side rests on one to nine sources. - share_small = 0 < min(sources(claiming), sources(gb_drawn & ~flag)) < 10 + # share is given only where neither side rests on one or two sources. + share_small = ( + 0 < min(sources(claiming), sources(gb_drawn & ~flag)) < UK_DISCLOSURE_FLOOR + ) if not drawn_weight: share: float | str | None = None elif share_small: - share = "<10" + share = UK_WITHHELD else: share = small_cell_share( float(weights[claiming].sum()) / drawn_weight, gb_sources diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/nts_bus_travel.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/nts_bus_travel.py index df4d58a304..f3e9c3d3e9 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/nts_bus_travel.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/nts_bus_travel.py @@ -59,6 +59,7 @@ uk_time_period, validate_uk_national_frame, ) +from microcosm.build.uk_runtime.receipt_counts import UK_DISCLOSURE_FLOOR, UK_WITHHELD from microcosm.build.uk_runtime.support_clip import ( UKSupportClipReceipt, support_clip_to_donor_with_receipt, @@ -193,13 +194,14 @@ def boarding_class_column(series: str, boarding_class: str) -> str: FREQUENCY_SOURCE_INTERVIEW = "interview_band" FREQUENCY_SOURCE_PUBLISHED_SHARES = "published_shares" #: The disclosure floor of the fare-mix receipt lines (UK Data Service End User -#: Licence CD137 clause 8 and CD171 section 5.2.1, whose working floor is 10 -#: cases): a line, and its complement, must rest on at least this many -#: unweighted boardings and this many distinct households, because one -#: respondent makes many boardings; otherwise it reads ``"<10"``. -UK_NTS_RECEIPT_MINIMUM_BOARDINGS = 10 -UK_NTS_RECEIPT_MINIMUM_HOUSEHOLDS = 10 -UK_NTS_RECEIPT_SUPPRESSED = "<10" +#: Licence CD137 clause 8 and CD171 section 5.2.1; the build's floor of three +#: cases, ``receipt_counts.UK_DISCLOSURE_FLOOR``): a line, and its complement, +#: must rest on at least this many unweighted boardings and this many distinct +#: households, because one respondent makes many boardings; otherwise it reads +#: ``"<3"``. +UK_NTS_RECEIPT_MINIMUM_BOARDINGS = UK_DISCLOSURE_FLOOR +UK_NTS_RECEIPT_MINIMUM_HOUSEHOLDS = UK_DISCLOSURE_FLOOR +UK_NTS_RECEIPT_SUPPRESSED = UK_WITHHELD class NTSBusTravelError(ValueError): @@ -963,7 +965,7 @@ def _fare_mix_receipt( the journey), weighted as the boarding classes are. Before the cap: the share paid above the cap, by more than the tolerance, and their mean fare, at that year's prices. Under the cap: the share paid at the cap, within - the tolerance. A line reads ``"<10"`` unless it and its complement each + the tolerance. A line reads ``"<3"`` unless it and its complement each rest on ``UK_NTS_RECEIPT_MINIMUM_BOARDINGS`` unweighted boardings and ``UK_NTS_RECEIPT_MINIMUM_HOUSEHOLDS`` distinct households. Shares are rounded to two decimals and fares to the penny; no minimum, maximum or diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/pension_coherence.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/pension_coherence.py index e5e3ad90ca..5e2a2cd2f5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/pension_coherence.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/pension_coherence.py @@ -36,7 +36,12 @@ from microcosm.build.uk_runtime.employer_pension_contributions import ( ASHE_EMPLOYER_RATE_BANDS, ) -from microcosm.build.uk_runtime.receipt_counts import distinct_count, support_band +from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, + distinct_count, + support_band, +) #: ASHE's highest employer contribution rate, the top of its open band as the #: employer draw closes it (``employer_pension_contributions.py``). @@ -101,18 +106,18 @@ def coherence_receipt( """Banded support and weighted amounts for one coherence step. Support is counted on distinct source households (``support_band``), and - the weighted amounts are withheld as "<10" where one to nine of them carry + the weighted amounts are withheld as "<3" where one or two of them carry the change, so the receipt gives back no small cell. """ mask = np.asarray(changed, dtype=bool) weight = np.asarray(weights, dtype=np.float64) sources = distinct_count(source_ids, mask, weight) - small = 0 < sources < 10 + small = 0 < sources < UK_DISCLOSURE_FLOOR before_mass = float(np.dot(weight[mask], np.asarray(before, dtype=float)[mask])) after_mass = float(np.dot(weight[mask], np.asarray(after, dtype=float)[mask])) return { "support": support_band(sources), - "weighted_before": "<10" if small else before_mass, - "weighted_after": "<10" if small else after_mass, + "weighted_before": UK_WITHHELD if small else before_mass, + "weighted_after": UK_WITHHELD if small else after_mass, } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/property_purchases.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/property_purchases.py index aa0d348920..0de65a8446 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/property_purchases.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/property_purchases.py @@ -73,6 +73,8 @@ validate_uk_national_frame, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_count, extreme_count, small_cell_share, @@ -655,8 +657,8 @@ def weighted_value(scale: float) -> float: def sources(mask: np.ndarray) -> int: return distinct_count(ids, mask, weights) - # UKDS disclosure control (receipt_counts): a weighted figure one to nine - # source households carry is "<10", and so is anything derived from it. + # UKDS disclosure control (receipt_counts): a weighted figure one or two + # source households carry is "<3", and so is anything derived from it. fitted_sources = sources(fitted) at_cap_sources = sources(at_cap) # Copies of one source can sit on both sides, so each side is counted on @@ -667,15 +669,17 @@ def sources(mask: np.ndarray) -> int: # The eligible owner weight less the fitted transactions is the eligible # owners who do not buy, and so is that weight times one less the event # rate: both are given only where neither the buyers nor the others rest - # on one to nine sources. - eligible_small = 0 < min(fitted_sources, sources(eligible & ~fitted)) < 10 + # on one or two sources. + eligible_small = ( + 0 < min(fitted_sources, sources(eligible & ~fitted)) < UK_DISCLOSURE_FLOOR + ) fitted_value = float(np.dot(prices, weights * sdlt_mask)) at_cap_share = float(weights[at_cap].sum()) / fitted_count if fitted_count else 0.0 # The share at the cap is withheld where the fit or either side of it - # rests on one to nine sources: beside the fitted weight a small side + # rests on one or two sources: beside the fitted weight a small side # would come back, and a share of one beside a small fit still describes it. - at_cap_small = ( - 0 < fitted_sources < 10 or 0 < min(at_cap_sources, uncapped_sources) < 10 + at_cap_small = 0 < fitted_sources < UK_DISCLOSURE_FLOOR or ( + 0 < min(at_cap_sources, uncapped_sources) < UK_DISCLOSURE_FLOOR ) receipt: dict[str, object] = { "property_type": target.property_type, @@ -688,19 +692,19 @@ def sources(mask: np.ndarray) -> int: max(0.0, 1.0 - fitted_value / target.value), fitted_sources ), "eligible_owner_weight": ( - "<10" + UK_WITHHELD if eligible_small else small_cell_share(eligible_weight, eligible_sources) ), "event_rate": ( - "<10" + UK_WITHHELD if eligible_small else small_cell_share(fitted_count / eligible_weight, fitted_sources) ), "price_scale": ( None if scale is None else small_cell_share(scale, fitted_sources) ), - "weighted_share_at_stock_cap": "<10" if at_cap_small else at_cap_share, + "weighted_share_at_stock_cap": UK_WITHHELD if at_cap_small else at_cap_share, "stock_cap_support": extreme_count(at_cap_sources), "purchases_outside_sdlt_regions_weight": small_cell_share( float(weights[outside].sum()), sources(outside) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py index a868c5f7e8..7ada7a28be 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py @@ -2,15 +2,17 @@ Stage receipts are build output and can reach a release manifest, so a count of survey records follows UKDS EUL disclosure control (CD137 clause 8, -CD171 section 5.2.1): nothing from fewer than ten records, and no exact count +CD171 section 5.2.1): nothing from one or two records, and no exact count that, beside a published sample size or another receipt, narrows a small group by difference. A count a gate must read exactly, such as the zero a check requires, stays a count of zero. A share follows the same rule: an unweighted share is floored to two decimals, since an exact one gives back -its count, and a weighted share carried by one to nine records is "<10". +its count, and a weighted share carried by one or two records is "<3". -Ten is CD171's working minimum, and no study the build reads sets a higher -one. The UK Data Service catalogue entries were read for conditions beyond +Three is CD171's absolute floor. The build used ten, CD171's working minimum +against secondary disclosure across outputs, until María's ruling of +2026-10-29 moved every output to three (``UK_DISCLOSURE_FLOOR``). No study the +build reads sets a higher one. The UK Data Service catalogue entries were read for conditions beyond the End User Licence (microcosm#1278): the FRS 2024-25 (SN 9563) has none (checked 2026-10-16), and neither have the LCFS, ETB, WAS and NTS studies (checked 2026-10-14). The SPI 2022-23 Public Use Tape (SN 9422, checked @@ -33,6 +35,14 @@ #: The lineage a stage receipt counts distinct support by: support copies #: repeat their source household, so a cell is counted in sources, not rows. SOURCE_HOUSEHOLD_COLUMN = "household_source_id" +#: CD171's absolute floor in distinct source households: a figure resting on +#: fewer is withheld, with any figure that gives it back by difference +#: (María's ruling of 2026-10-29 moved every output from ten to it). +UK_DISCLOSURE_FLOOR = 3 +#: How a withheld figure reads. +UK_WITHHELD = f"<{UK_DISCLOSURE_FLOOR}" +#: The band a banded count prints from the floor up to ten. +UK_BELOW_TEN_BAND = f"{UK_DISCLOSURE_FLOOR}-9" def source_household_ids(household: Any, *, stage: str) -> np.ndarray: @@ -76,10 +86,10 @@ def distinct_count( def rounded_count(count: int) -> int | str: """A count of donor records, rounded. - Zero exact, one to nine "<10", then to the nearest ten below a thousand - and to the nearest hundred from a thousand, so that a count near a - survey's published sample size does not give back by difference how many - records a step left out. Halves round up. + Zero exact, one or two "<3", three to nine exact, then to the nearest ten + below a thousand and to the nearest hundred from a thousand, so that a + count near a survey's published sample size does not give back by + difference how many records a step left out. Halves round up. """ value = int(count) @@ -87,8 +97,10 @@ def rounded_count(count: int) -> int | str: raise ValueError(f"a record count cannot be negative: {value}.") if value == 0: return 0 + if value < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD if value < 10: - return "<10" + return value if value < 1000: return (value + 5) // 10 * 10 return (value + 50) // 100 * 100 @@ -97,10 +109,10 @@ def rounded_count(count: int) -> int | str: def extreme_count(count: int) -> int | str: """A count of records picked out by an extreme value, in bands. - Zero exact, then "<10", "10-49" and "50-99", and from a hundred up the - count to the nearest hundred: how many donors had a negative spend, a rate - above its bound or VAT above their spending says something about the tail - a nearby count would not. + Zero exact, then "<3", "3-9", "10-49" and "50-99", and from a hundred up + the count to the nearest hundred: how many donors had a negative spend, a + rate above its bound or VAT above their spending says something about the + tail a nearby count would not. """ value = int(count) @@ -108,8 +120,10 @@ def extreme_count(count: int) -> int | str: raise ValueError(f"a record count cannot be negative: {value}.") if value == 0: return 0 + if value < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD if value < 10: - return "<10" + return UK_BELOW_TEN_BAND if value < 50: return "10-49" if value < 100: @@ -120,9 +134,9 @@ def extreme_count(count: int) -> int | str: def support_band(count: int) -> int | str: """A cell's survey support as a band, never as a count. - Zero exact, as the other counts here, then "<10", "10-29" and "30+": the - band a stage receipt gives beside the cell's weighted figures, counted on - distinct source households. + Zero exact, as the other counts here, then "<3", "3-9", "10-29" and "30+": + the band a stage receipt gives beside the cell's weighted figures, counted + on distinct source households. """ value = int(count) @@ -130,8 +144,10 @@ def support_band(count: int) -> int | str: raise ValueError(f"a record count cannot be negative: {value}.") if value == 0: return 0 + if value < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD if value < 10: - return "<10" + return UK_BELOW_TEN_BAND if value < 30: return "10-29" return "30+" @@ -152,13 +168,13 @@ def floored_share(share: float) -> float: def small_cell_share(share: float, count: int) -> float | str: - """A weighted share of records, or "<10" when one to nine records carry it.""" + """A weighted share of records, or "<3" when one or two records carry it.""" value = int(count) if value < 0: raise ValueError(f"a record count cannot be negative: {value}.") - if 0 < value < 10: - return "<10" + if 0 < value < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD return float(share) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/salary_sacrifice.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/salary_sacrifice.py index b6e843d8c5..0cd68ec7bd 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/salary_sacrifice.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/salary_sacrifice.py @@ -764,7 +764,7 @@ def impute_salary_sacrifice( person["employment_income"] = employment_income person[SALSAC_PRE_CONVERSION_PAY_COLUMN] = pre_conversion_pay # Weighted aggregates only, banded on distinct source households; a figure - # one to nine of them carry is "<10" (UKDS disclosure control). + # one or two of them carry is "<3" (UKDS disclosure control). def bonus_sources(mask: np.ndarray) -> int: return distinct_count(source_ids, mask, person_weights) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/single_year_ages.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/single_year_ages.py index 6348670e1d..2f08f392e4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/single_year_ages.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/single_year_ages.py @@ -16,9 +16,9 @@ age_tail stage draws each such person's band from ONS's 80 to 84, 85 to 89 and 90 and over, with a uniform age within the band, so the single years above 80 show that draw. Every cell names its carriers as -distinct source households and reads "<10" in place of its figures when fewer -than 10 carry it. When any single year of a sex is withheld, every cell of that -sex reads "<10", its bands too, so no difference from the sex's persons, which +distinct source households and reads "<3" in place of its figures when fewer +than 3 carry it. When any single year of a sex is withheld, every cell of that +sex reads "<3", its bands too, so no difference from the sex's persons, which other reports give, gives a withheld age back (UKDS disclosure control). """ diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_income.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_income.py index f88a6937c6..4a7c4d6ef3 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_income.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_income.py @@ -49,6 +49,7 @@ coherence_receipt, twin_rate_employer_contributions, ) +from microcosm.build.uk_runtime.receipt_counts import UK_DISCLOSURE_FLOOR, UK_WITHHELD from microcosm.build.uk_runtime.spi_rank_transport import ( SPI_STAGE1_ANALOGUE_COLUMNS, SPI_TRANSPORT_FIT_NAME, @@ -1365,17 +1366,17 @@ def _band_mean_total_income( """A reserved band's mean realised total income, for its receipt row. A carrier's realised total income is its drawn tape record's own, so a - band whose carriers drew fewer than ten distinct records, as any band with - fewer than ten carriers does, would give back one record's value or come - close to it. Its mean is "<10" (UKDS disclosure control; see + band whose carriers drew fewer than three distinct records, as any band + with fewer than three carriers does, would give back one record's value or + come close to it. Its mean is "<3" (UKDS disclosure control; see ``receipt_counts``), and a band without carriers has none. No single record's value, such as the band's lowest or highest, is recorded. """ if not realized.size: return None - if np.unique(drawn).size < 10: - return "<10" + if np.unique(drawn).size < UK_DISCLOSURE_FLOOR: + return UK_WITHHELD return float(realized.mean()) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index 90122f9527..9750b9553f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -8,6 +8,11 @@ import numpy as np from microcosm.build.gates import GateResult +from microcosm.build.uk_runtime.receipt_counts import ( + UK_BELOW_TEN_BAND, + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, +) _UK_PACKAGE = "microcosm.build.uk" _FLOAT_RELATIVE_TOLERANCE = 8.0 * np.finfo(np.float64).eps @@ -1210,8 +1215,8 @@ def _frs_annual_income_spells_gate( current employee earners: the survey's spells can add part-year earners but cannot remove a current one. Where the receipt measures it, at least the declared share of the pay outside the current job is observed rather - than drawn from a donor. A ratio or share carried by fewer than ten - households, which the receipt prints "<10", is flagged unmeasured, never + than drawn from a donor. A ratio or share carried by fewer than three + households, which the receipt prints "<3", is flagged unmeasured, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). """ @@ -1234,7 +1239,7 @@ def _frs_annual_income_spells_gate( upper = _finite_number(bounds[1], label=f"{stage}.{bounds_key}[1]") value = evidence.get(key) details[key] = value - if value == "<10": + if value == UK_WITHHELD: details[f"{key}_measured"] = False elif isinstance(value, bool) or not isinstance(value, int | float): failures.append(f"{stage}: {key} is {value!r}, not a measured ratio.") @@ -1248,7 +1253,7 @@ def _frs_annual_income_spells_gate( ) observed = evidence.get("other_spells_pay_observed_share") details["other_spells_pay_observed_share"] = observed - if observed == "<10": + if observed == UK_WITHHELD: details["observed_pay_share_measured"] = False elif isinstance(observed, bool) or not isinstance(observed, int | float): failures.append(f"{stage}: other_spells_pay_observed_share is {observed!r}.") @@ -1412,7 +1417,7 @@ def _uc_take_up_gate( caseload is within ``maximum_caseload_deviation`` of DWP's count, and the family type's whole caseload is no further from DWP's than before the redraw, give or take that share of DWP's count. A family type whose - caseload rests on fewer than ten sources, which the receipt prints "<10", + caseload rests on fewer than three sources, which the receipt prints "<3", is flagged unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). """ @@ -1447,7 +1452,7 @@ def _uc_take_up_gate( ) } details[str(name)] = values - if any(value == "<10" for value in values.values()): + if any(value == UK_WITHHELD for value in values.values()): unchecked.append(str(name)) continue if any(not isinstance(value, int | float) for value in values.values()): @@ -3766,7 +3771,7 @@ def _close(observed: object, value: float) -> bool: f"not {required_support!r}." ) residual = donor.get("total_beside_lines") - if residual == "<10": + if residual == UK_WITHHELD: unchecked_residuals.append(name) elif isinstance(residual, int | float) and residual > maximum_residual: failures.append( @@ -4363,8 +4368,8 @@ def _property_purchases_gate( not exact); its value is HMRC's less the recorded shortfall, which the stage refuses past one fifth, so the gate refuses past the declared share; and the individuals' shares that carry the all-buyers totals onto - households are proper shares. A kind whose buyers rest on fewer than ten - sources, which the receipt prints "<10", is flagged unchecked, never + households are proper shares. A kind whose buyers rest on fewer than three + sources, which the receipt prints "<3", is flagged unchecked, never failed (María's ruling of 2026-10-26). """ @@ -4393,7 +4398,7 @@ def _property_purchases_gate( for kind in kinds: name = str(kind.get("property_type")) if any( - kind.get(field) == "<10" + kind.get(field) == UK_WITHHELD for field in ( "fitted_transactions", "value_shortfall_share", @@ -4468,7 +4473,7 @@ def _regional_home_values_gate( rows; no source sits at the value cap beyond the declared count; the knots are the declared basis year and the ranking the declared basis; and the weighted value stays positive on both sides of the stage. A count the - receipt bands for resting on fewer than ten records is flagged rather + receipt bands for resting on fewer than three records is flagged rather than failed where the band cannot tell (María's ruling of 2026-10-26). """ @@ -4482,21 +4487,21 @@ def _regional_home_values_gate( failures.append( f"{stage}: the receipt rewrites regions {sorted(rewritten)}, not {regions}." ) - # A region the receipt prints "<10" rewrote one to nine rows: it is not + # A region the receipt prints "<3" rewrote one or two rows: it is not # empty, and it is flagged (a small-cell rule never fails a build, María's # ruling of 2026-10-26). The sum check takes it at its lower bound. banded = sorted( - str(region) for region, count in rewritten.items() if count == "<10" + str(region) for region, count in rewritten.items() if count == UK_WITHHELD ) counts = { - str(region): 1 if count == "<10" else int(count) + str(region): 1 if count == UK_WITHHELD else int(count) for region, count in rewritten.items() } empty = sorted(region for region, count in counts.items() if count <= 0) if empty: failures.append(f"{stage}: no row is rewritten in {empty}.") rows = evidence.get("rows", 0) - if rows != "<10" and sum(counts.values()) > int(rows): + if rows != UK_WITHHELD and sum(counts.values()) > int(rows): failures.append(f"{stage}: more rows are rewritten than the stage carries.") at_cap = evidence.get("sources_at_cap", -1) maximum_at_cap = int(parameters["maximum_sources_at_cap"]) @@ -4534,7 +4539,7 @@ def _regional_home_values_gate( details = { "regions": regions, "sources_at_cap": at_cap, - "regions_rewritten_under_ten": banded, + "regions_rewritten_under_floor": banded, "sources_at_cap_unchecked": cap_unchecked, } if failures: @@ -4543,9 +4548,14 @@ def _regional_home_values_gate( #: The support bands the take-up receipts print (receipt_counts). -_SUPPORT_BANDS = frozenset({"<10", "10-29", "30+"}) +_SUPPORT_BANDS = frozenset({UK_WITHHELD, UK_BELOW_TEN_BAND, "10-29", "30+"}) #: The counts each band stands for, lowest and highest. -_SUPPORT_BAND_BOUNDS = {"<10": (1, 9), "10-29": (10, 29), "30+": (30, math.inf)} +_SUPPORT_BAND_BOUNDS = { + UK_WITHHELD: (1, UK_DISCLOSURE_FLOOR - 1), + UK_BELOW_TEN_BAND: (UK_DISCLOSURE_FLOOR, 9), + "10-29": (10, 29), + "30+": (30, math.inf), +} def _legacy_closure_take_up_gate( @@ -4559,7 +4569,7 @@ def _legacy_closure_take_up_gate( the contract it can read: the share is measured on the declared basis, every combination's rate is a probability from a declared source, its support is a printed band, and its unreachable flag is a boolean, a - withheld "<10" or absent; the share claiming at closure is a share. + withheld "<3" or absent; the share claiming at closure is a share. """ check = "legacy_closure_take_up" @@ -4588,13 +4598,13 @@ def _legacy_closure_take_up_gate( if combination.get("support") not in _SUPPORT_BANDS: failures.append(f"{stage}: {name} prints no support band.") flag = combination.get("rate_unreachable") - if flag == "<10": + if flag == UK_WITHHELD: withheld_flags += 1 elif not (flag is None or isinstance(flag, bool)): failures.append(f"{stage}: {name} flags {flag!r} as unreachable.") - # A drawn cohort on fewer than ten sources prints the share withheld. + # A drawn cohort on fewer than three sources prints the share withheld. printed = evidence.get("great_britain_weighted_share_claiming_at_closure") - if printed != "<10": + if printed != UK_WITHHELD: share = _finite_number( printed, label=f"{stage}.great_britain_weighted_share_claiming_at_closure" ) @@ -4603,7 +4613,7 @@ def _legacy_closure_take_up_gate( details = { "combinations": len(combinations), "unreachable_flags_withheld": withheld_flags, - "share_claiming_at_closure_withheld": printed == "<10", + "share_claiming_at_closure_withheld": printed == UK_WITHHELD, } if failures: return _fail(stage, check, failures, details) @@ -4626,7 +4636,7 @@ def _apprentice_draw_gate( flags imply at the engine's own Class 1 schedule must stay at or below ``maximum_implied_relief``, HMRC's apprentice relief for every apprentice under 25 (Vahid's review of microcosm#1373, S1). A figure resting on fewer - than ten source households, which the receipt prints "<10", is named + than ten source households, which the receipt prints "<3", is named unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). """ @@ -4674,7 +4684,7 @@ def _apprentice_draw_gate( "realization_deviation", "implied_relief", ) - if receipt.get(key) == "<10" + if receipt.get(key) == UK_WITHHELD ] def _figure(key: str) -> float | None: @@ -4745,7 +4755,7 @@ def _figure(key: str) -> float | None: f"{stage}: the receipt records no implied relief, so the draw cannot be " "held below HMRC's apprentice relief." ) - elif relief != "<10": + elif relief != UK_WITHHELD: implied = _finite_number(relief, label=f"{stage}.implied_relief") if implied > ceiling: failures.append( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_take_up.py index 9d901698cc..38160cb242 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_take_up.py @@ -90,6 +90,8 @@ validate_uk_national_frame, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_count, extreme_count, rounded_count, @@ -519,10 +521,12 @@ def sources(mask: np.ndarray) -> int: "support": support_band(supported), "drawn_support": support_band(sources(solve & drawable)), # One bit on which side of DWP's count the pool's undrawn - # claims lie, given only where ten or more sources carry - # the pool (UKDS disclosure control). + # claims lie, given only where three or more sources + # carry the pool (UKDS disclosure control). "target_unreachable": ( - pool["unreachable"] if supported >= 10 else "<10" + pool["unreachable"] + if supported >= UK_DISCLOSURE_FLOOR + else UK_WITHHELD ), } ) @@ -827,7 +831,7 @@ def working_age_housing_benefit_receipt( engine does not move, and how many of them keep the award before and after the redraw, so the stage's effect on working-age Housing Benefit can be set beside DWP's 2025 caseload (Vahid's review of #1344, item 7). Weighted - figures only where ten or more source households carry them. + figures only where three or more source households carry them. """ column = "housing_benefit_reported" diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_apprentice_draw.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_apprentice_draw.py index 018a0d6eab..f5d5681385 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_apprentice_draw.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_apprentice_draw.py @@ -149,30 +149,30 @@ def test_no_eligible_employee_flags_nobody() -> None: assert draw.receipt["cap_bound"] is True -def test_receipt_withholds_a_flagged_weight_on_fewer_than_ten_households() -> None: +def test_receipt_withholds_a_flagged_weight_on_fewer_than_three_households() -> None: person = _small([22] * 20, ["FT_EMPLOYED"] * 20) - draw = derive_is_apprentice(person, rate=0.25) + draw = derive_is_apprentice(person, rate=0.1) - assert int(draw.flags.sum()) == 5 - assert draw.receipt["flagged_support"] == "<10" - assert draw.receipt["realized_mass"] == "<10" - assert draw.receipt["realization_deviation"] == "<10" + assert int(draw.flags.sum()) == 2 + assert draw.receipt["flagged_support"] == "<3" + assert draw.receipt["realized_mass"] == "<3" + assert draw.receipt["realization_deviation"] == "<3" assert draw.receipt["population_mass"] == 20.0 -def test_receipt_withholds_a_population_on_fewer_than_ten_households() -> None: - # Six people aged 21 to 24 in three households, with a one-person target. +def test_receipt_withholds_a_population_on_fewer_than_three_households() -> None: + # Six people aged 21 to 24 in two households, with a one-person target. person = _small( [22, 23, 21, 24, 22, 23], ["FT_EMPLOYED"] * 6, - households=[1, 1, 2, 2, 3, 3], + households=[1, 1, 1, 2, 2, 2], ) draw = derive_is_apprentice(person, rate=1 / 6) receipt = draw.receipt - assert receipt["population_support"] == "<10" + assert receipt["population_support"] == "<3" for key in ( "population_mass", "eligible_mass", @@ -180,7 +180,7 @@ def test_receipt_withholds_a_population_on_fewer_than_ten_households() -> None: "realized_mass", "realization_deviation", ): - assert receipt[key] == "<10", key + assert receipt[key] == "<3", key def test_refuses_a_frame_without_employment_status() -> None: @@ -243,9 +243,9 @@ def test_stage_realizes_the_target_at_the_frame_household_weights(no_engine) -> assert apprentices["build_year"] == 2024 assert apprentices["rate"] == 0.06 # Two households carry everyone, so the receipt withholds the weights. - assert apprentices["population_support"] == "<10" - assert apprentices["target"] == "<10" - assert apprentices["flagged_support"] == "<10" + assert apprentices["population_support"] == "<3" + assert apprentices["target"] == "<3" + assert apprentices["flagged_support"] == "<3" def test_stage_has_no_receipt_before_it_runs() -> None: @@ -283,12 +283,12 @@ def test_receipt_records_the_relief_the_flags_imply() -> None: assert draw.receipt["relief_schedule"] == _SCHEDULE -def test_receipt_withholds_a_relief_on_fewer_than_ten_households() -> None: - person = _small([22] * 5, ["FT_EMPLOYED"] * 5).assign(employment_income=20_000.0) +def test_receipt_withholds_a_relief_on_fewer_than_three_households() -> None: + person = _small([22] * 2, ["FT_EMPLOYED"] * 2).assign(employment_income=20_000.0) draw = derive_is_apprentice(person, rate=1.0, relief_schedule=_SCHEDULE) - assert draw.receipt["implied_relief"] == "<10" + assert draw.receipt["implied_relief"] == "<3" def test_receipt_records_no_relief_without_a_schedule() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_carers_allowance_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_carers_allowance_take_up.py index 8771a9021d..3ff904ee61 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_carers_allowance_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_carers_allowance_take_up.py @@ -405,26 +405,26 @@ def test_draws_are_keyed_by_person_identity() -> None: def test_the_receipt_bands_support_copies_on_their_sources() -> None: - # UKDS disclosure control: twelve support copies of three source - # households carry nothing above "<10", however many rows copy them. + # UKDS disclosure control: twelve support copies of two source + # households carry nothing above "<3", however many rows copy them. n = 12 frame = _frame( care_hours=np.full(n, 35.0), reported=np.zeros(n), weekly_pay=np.full(n, 300.0), - source_ids=np.arange(n) % 3, + source_ids=np.arange(n) % 2, ) evidence = _run(frame, rate=1.0).evidence() - assert evidence["eligible_support"] == "<10" - assert evidence["eligible_weighted_persons"] == "<10" - assert evidence["drawn_support"] == "<10" - assert evidence["drawn_share_of_over_limit_pool"] == "<10" - assert evidence["in_household_disabled_member_share"] == "<10" + assert evidence["eligible_support"] == "<3" + assert evidence["eligible_weighted_persons"] == "<3" + assert evidence["drawn_support"] == "<3" + assert evidence["drawn_share_of_over_limit_pool"] == "<3" + assert evidence["in_household_disabled_member_share"] == "<3" def test_the_share_hides_a_small_side() -> None: - # Forty eligible carers on forty sources, three of them drawn: the share - # times the eligible weight would give the three carers' weight back. + # Forty eligible carers on forty sources, two of them drawn: the share + # times the eligible weight would give the two carers' weight back. n = 40 frame = _frame( care_hours=np.full(n, 35.0), @@ -436,20 +436,20 @@ def test_the_share_hides_a_small_side() -> None: frame.table("person")["person_id"].to_numpy()[:n], seed=0, salt=_OUTPUT ) ) - result = _run(frame, rate=float((uniforms[2] + uniforms[3]) / 2)) - assert int(result.frame.table("person")[_OUTPUT].sum()) == 3 + result = _run(frame, rate=float((uniforms[1] + uniforms[2]) / 2)) + assert int(result.frame.table("person")[_OUTPUT].sum()) == 2 evidence = result.evidence() assert evidence["eligible_support"] == "30+" assert evidence["eligible_weighted_persons"] == pytest.approx(40.0) - assert evidence["drawn_support"] == "<10" - assert evidence["drawn_share_of_over_limit_pool"] == "<10" - # All but three drawn: the share would give the three undrawn carers' - # weight back the same way. - result = _run(frame, rate=float((uniforms[36] + uniforms[37]) / 2)) - assert int(result.frame.table("person")[_OUTPUT].sum()) == 37 + assert evidence["drawn_support"] == "<3" + assert evidence["drawn_share_of_over_limit_pool"] == "<3" + # All but two drawn: the share would give the two undrawn carers' weight + # back the same way. + result = _run(frame, rate=float((uniforms[37] + uniforms[38]) / 2)) + assert int(result.frame.table("person")[_OUTPUT].sum()) == 38 evidence = result.evidence() assert evidence["drawn_support"] == "30+" - assert evidence["drawn_share_of_over_limit_pool"] == "<10" + assert evidence["drawn_share_of_over_limit_pool"] == "<3" def test_households_are_read_through_membership_not_position() -> None: @@ -504,8 +504,12 @@ def test_households_are_read_through_membership_not_position() -> None: assert evidence["eligible_weighted_persons"] == pytest.approx(weights.sum()) assert evidence["eligible_support"] == "10-29" assert evidence["drawn_share_of_over_limit_pool"] == 1.0 - assert evidence["scotland_eligible_support"] == "<10" - assert evidence["scotland_eligible_weighted_persons"] == "<10" + # Eight Scottish carers on eight sources: their weight is given, read + # through membership. + assert evidence["scotland_eligible_support"] == "3-9" + assert evidence["scotland_eligible_weighted_persons"] == pytest.approx( + weights[regions == "SCOTLAND"].sum() + ) assert int(carer[scottish].sum()) == 8 diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_realised_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_realised_take_up.py index 0ef56f14b5..41367a1413 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_realised_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_realised_take_up.py @@ -36,7 +36,7 @@ def rate(self, key: str, build_year: int | None = None) -> float: return self.rates[key] -def _tables(units: int = 30, high_pay: int = 3): +def _tables(units: int = 30, high_pay: int = 2): ids = np.arange(1, units + 1) # One adult and one child per unit; the child is under 2 in every unit. person = pd.DataFrame( @@ -85,9 +85,9 @@ def test_realised_take_up_reports_shares_beside_the_contract_rates() -> None: assert cell["weighted_share"] == pytest.approx(0.75) universal = receipt["flags"]["would_claim_universal_childcare"] assert universal["contract_rate"] == pytest.approx(0.5 + 0.5 * 0.2) - # Three high-pay units: under the floor, so no share is written. + # Two high-pay units: under the floor of three, so no share is written. assert universal["cells"]["units_with_a_child_under_5_and_pay_over_100k"] == { - "source_households": "<10" + "source_households": "<3" } usage = receipt["flags"]["max_free_entitlement_hours_used.age_1"] assert usage["contract_key"] == "extended_childcare_age_1_usage" diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_liability_tool.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_liability_tool.py index 5d2b07a02f..21c0d3912d 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_liability_tool.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_liability_tool.py @@ -52,7 +52,8 @@ def _cell(report: dict, code: str, band: str) -> dict: def test_a_supported_cell_gives_means_and_ratios_and_a_thin_one_is_withheld() -> None: table = pd.DataFrame( _households("E07000110", "D", list(range(100, 112))) - + _households("E07000110", "H", [200, 201, 202], simulated=4_800.0) + # Two source households: under the floor of three. + + _households("E07000110", "H", [200, 201], simulated=4_800.0) ) report = summarise(table) @@ -77,12 +78,13 @@ def test_a_supported_cell_gives_means_and_ratios_and_a_thin_one_is_withheld() -> "council_tax_band": "H", "withheld": True, } - assert report["great_britain"]["source_households"] == 15 - assert report["great_britain"]["totals"]["council_tax"] == 15 * 10.0 * 2_000.0 + assert report["great_britain"]["source_households"] == 14 + assert report["great_britain"]["totals"]["council_tax"] == 14 * 10.0 * 2_000.0 def test_clones_of_one_source_household_count_once() -> None: - sources = [300, 300, 300, 301, 301, 302, 303, 304, 305, 306, 307, 308] + # Five rows, but two source households: under the floor of three. + sources = [300, 300, 300, 301, 301] table = pd.DataFrame(_households("E09000033", "C", sources, region="LONDON")) report = summarise(table) @@ -97,7 +99,7 @@ def test_northern_ireland_is_left_out_and_a_thin_region_is_withheld() -> None: + _households( "W06000015", "B", - [500, 501, 502, 503], + [500, 501], region="WALES", country="WALES", ) @@ -122,7 +124,7 @@ def test_northern_ireland_is_left_out_and_a_thin_region_is_withheld() -> None: assert "NORTHERN_IRELAND" not in report["by_country"] assert report["by_country"]["WALES"] == {"withheld": True} assert report["by_region"]["SOUTH_EAST"]["source_households"] == 12 - assert report["great_britain"]["source_households"] == 16 + assert report["great_britain"]["source_households"] == 14 def test_an_authority_the_engine_charges_nothing_is_named() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_etb_vat.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_etb_vat.py index 496fde8eed..bd7dda8ba4 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_etb_vat.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_etb_vat.py @@ -65,7 +65,7 @@ def test_etb_vat_cleaning_drops_donors_with_no_expenditure_after_vat() -> None: assert donor.empty assert donor.attrs[UK_ETB_VAT_DONOR_RATE_RECEIPT] == { "rate_bounds": [0.0, 1.0], - "rows_dropped_no_expenditure_after_vat": "<10", + "rows_dropped_no_expenditure_after_vat": "<3", "rows_capped_at_upper_bound": 0, } @@ -84,9 +84,9 @@ def test_etb_vat_cleaning_caps_rates_above_one() -> None: assert donor["full_rate_vat_expenditure_rate"].between(0.0, 1.0).all() receipt = donor.attrs[UK_ETB_VAT_DONOR_RATE_RECEIPT] # Donor counts are banded (microcosm#1164): an extreme-value count under - # ten is "<10"; zero stays zero. The receipt records no donor size, which + # three is "<3"; zero stays zero. The receipt records no donor size, which # beside the donor year's sample size would give the dropped count back. - assert receipt["rows_capped_at_upper_bound"] == "<10" + assert receipt["rows_capped_at_upper_bound"] == "<3" assert receipt["rows_dropped_no_expenditure_after_vat"] == 0 assert "donor_rows" not in receipt diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py index 1a5c4c62a4..46808db62b 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py @@ -390,7 +390,7 @@ def test_receipt_gives_bands_and_structural_zeros() -> None: ) assert set(receipt["spell_sources"]) == set(fai.SPELL_SOURCES) # A source carried by one household gives a band, never a count. - assert receipt["spell_sources"][fai.SOURCE_ENTRANT] == "<10" + assert receipt["spell_sources"][fai.SOURCE_ENTRANT] == "<3" for key in ( "full_year_rows_not_whole", "rows_outside_share_bounds", @@ -400,7 +400,8 @@ def test_receipt_gives_bands_and_structural_zeros() -> None: @pytest.mark.parametrize( - ("broken", "count"), [(0, 0), (3, "<10"), (12, "10-49"), (150, 200)] + ("broken", "count"), + [(0, 0), (1, "<3"), (3, "3-9"), (12, "10-49"), (150, 200)], ) def test_receipt_bands_its_structural_counts(broken: int, count: object) -> None: # A count of rows that break an invariant says something about the tail, @@ -469,7 +470,7 @@ def test_gate_passes_the_stages_own_receipt() -> None: gate = _gate(_leaver_evidence()) assert gate.passed, gate.failures # One household carries the pay outside the current job: a band, unmeasured. - assert gate.details["other_spells_pay_observed_share"] == "<10" + assert gate.details["other_spells_pay_observed_share"] == "<3" assert gate.details["observed_pay_share_measured"] is False @@ -477,7 +478,7 @@ def test_gate_passes_the_stages_own_receipt() -> None: ("key", "value", "message"), [ # The receipt bands a count of broken rows (extreme_count). - ("full_year_rows_not_whole", "<10", "full_year_rows_not_whole is '<10'"), + ("full_year_rows_not_whole", "<3", "full_year_rows_not_whole is '<3'"), ("rows_outside_share_bounds", 100, "rows_outside_share_bounds is 100"), ("rows_negative_other_spells", None, "rows_negative_other_spells is None"), # Weekly pay read as a monthly amount gives a ratio far above one. @@ -502,7 +503,8 @@ def test_gate_refuses_another_stages_receipt() -> None: def test_pay_concept_ratio_measures_few_reporters_and_refuses_none() -> None: """Fewer than ten reporting households only flags (María's ruling of - 2026-10-26): the ratio is measured, and the receipt prints it "<10".""" + 2026-10-26): the ratio is measured, and the receipt prints it from three + households up ("<3" below, the disclosure floor of 2026-10-29).""" person, adult, job, interview, _ = _population({}) ratio, support = fai.pay_concept_ratio( person["person_id"].to_numpy(), @@ -548,8 +550,8 @@ def test_a_thin_pay_concept_ratio_is_held_to_its_bounds(measured, used) -> None: @pytest.mark.parametrize("key", ["pay_concept_ratio", "annual_over_current_earners"]) -def test_gate_flags_a_ratio_on_fewer_than_ten_households(key: str) -> None: - gate = _gate({**_leaver_evidence(), key: "<10"}) +def test_gate_flags_a_ratio_on_fewer_than_three_households(key: str) -> None: + gate = _gate({**_leaver_evidence(), key: "<3"}) assert gate.passed, gate.failures assert gate.details[f"{key}_measured"] is False diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py index 8bc226024b..6b17f4daa5 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py @@ -407,15 +407,15 @@ def test_the_receipt_withholds_a_stratum_resting_on_few_households() -> None: def test_top_up_flags_few_donor_stakes_and_refuses_too_few_to_fit() -> None: - """Fewer than ten donor households only flags (María's ruling of - 2026-10-26): the fits' support reads "<10". The fit needs two.""" + """Fewer than three donor households only flags (María's ruling of + 2026-10-26): the fits' support reads "<3". The fit needs two.""" inputs = participation_inputs() stakes = np.zeros(len(inputs["donor_weights"])) - stakes[:5] = 10.0 + stakes[:2] = 10.0 inputs["donor_keys"] = {**inputs["donor_keys"], "national_lottery": stakes} result = top_up_gambling_participation(**inputs) key = result.receipt["keys"]["national_lottery"] - assert key["propensity"]["positive_support"] == "<10" + assert key["propensity"]["positive_support"] == "<3" stakes[1:] = 0.0 with pytest.raises(ValueError, match="2 or more households"): top_up_gambling_participation(**inputs) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_high_value_home_gates.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_high_value_home_gates.py index 1f4f836366..c980c55535 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_high_value_home_gates.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_high_value_home_gates.py @@ -120,17 +120,17 @@ def test_evidence_counts_bands_shares_correlations_and_support() -> None: evidence = uk_high_value_home_evidence(household, weights=weights, facts=facts) summary = evidence.summary bands = summary["england_owner_occupied_by_band_2026"] - # The toy pool's bands rest on fewer than ten source households, so the - # shipped copies are suppressed (PR #1270 review, finding 6), and so is - # the total, which rests on five and would give back their sum - # (microcosm#1306 review); empty bands stay as zero. + # The toy pool's 2.5m to 3.5m band rests on two source households, under + # the floor of three, so its shipped copy is suppressed (PR #1270 review, + # finding 6), and the 2m to 2.5m band goes with it, since the total less + # the shipped bands would give it back (microcosm#1306 review). The total + # rests on five and ships; empty bands stay as zero. assert bands["gbp_2m_to_2_5m"] is None and bands["gbp_2_5m_to_3_5m"] is None assert bands["gbp_3_5m_to_5m"] == 0.0 and bands["over_gbp_5m"] == 0.0 - assert bands["total"] is None + assert bands["total"] == pytest.approx(6.0) assert summary["england_bands_suppressed_small_cells"] == [ "gbp_2_5m_to_3_5m", "gbp_2m_to_2_5m", - "total", ] assert summary["obr"]["status"] == "awaiting_vendored_facts" shares = summary["regional_over_2m_share"] @@ -143,8 +143,9 @@ def test_evidence_counts_bands_shares_correlations_and_support() -> None: assert shares["gap"] == {"E12000007": None, "E12000008": None} assert shares["largest_gap_shipped"] == 0.0 assert shares["largest_gap_in_suppressed_region"] is True - # The frame total ships beside the shares, so it is withheld on the floor. - assert shares["frame_total"] is None + # The frame total rests on five sources, so it ships beside the withheld + # shares, which it cannot give back. + assert shares["frame_total"] == pytest.approx(6.0) rho = summary["seat_rank_correlation"]["over_gbp_2m"]["final"] assert rho["spearman_vs_derived_stock"] == pytest.approx(1.0) assert rho["spearman_vs_voa_band_h"] == pytest.approx(1.0) @@ -179,7 +180,7 @@ def test_support_gate_assesses_only_areas_with_derived_stock_and_reports_bands() ) cell = result.details["cells"]["constituency:over_gbp_2m"] assert cell["assessed_areas"] == 2 - assert cell["areas_by_source_band"] == {"<10": 2, "10-29": 0, "30+": 0} + assert cell["areas_by_source_band"] == {"<3": 1, "3-9": 1, "10-29": 0, "30+": 0} assert cell["areas_below_floor"] == 1 # seat B carries one source above 2m assert not result.passed assert any("constituency:over_gbp_2m" in failure for failure in result.failures) @@ -317,10 +318,14 @@ def test_obr_leg_reads_the_vendored_costing_rows() -> None: assert obr["non_owner_occupied_share_status"] == "available" assert obr["non_owner_occupied_share_fiscal_year"] == "2028" assert obr["owner_occupied_sensitivity_total"] == pytest.approx(99_000.0) - # The toy pool's total rests on five source households and is withheld, - # so it carries no ratio (the ratios are checked on a larger pool below). - assert summary["england_owner_occupied_by_band_2026"]["total"] is None - assert obr["frame_over_owner_occupied_sensitivity"] is None + # The toy pool's total rests on five source households, above the floor of + # three, so it ships with its ratio (the ratios are checked on a larger pool + # below). + total = summary["england_owner_occupied_by_band_2026"]["total"] + assert total == pytest.approx(5.0) + assert obr["frame_over_owner_occupied_sensitivity"] == pytest.approx( + total / obr["owner_occupied_sensitivity_total"] + ) england = { measure: facts.rows_at( level="country", measure_id=measure, threshold_id="over_gbp_2m" @@ -563,9 +568,9 @@ def test_obr_leg_reports_an_unreadable_share_without_raising(value) -> None: def test_small_cell_suppression_withholds_a_thin_total() -> None: - # One band on five sources and the rest empty: the total is that band, + # One band on two sources and the rest empty: the total is that band, # so both go (microcosm#1306 review). - household = _pool_by_band_2026({"gbp_2m_to_2_5m": 5}) + household = _pool_by_band_2026({"gbp_2m_to_2_5m": 2}) summary = uk_high_value_home_evidence( household, weights=np.full(len(household), 100.0), @@ -578,11 +583,11 @@ def test_small_cell_suppression_withholds_a_thin_total() -> None: def test_small_cell_suppression_protects_the_withheld_bands_together() -> None: - # Bands on 40, 4 and 3 sources: the two thin bands rest together on 7, so + # Bands on 40, 1 and 1 sources: the two thin bands rest together on 2, so # the total less the shipped bands would give their sum back; the next - # smallest band goes too, and the total, on 47, ships. + # smallest band goes too, and the total, on 42, ships. household = _pool_by_band_2026( - {"gbp_2m_to_2_5m": 40, "gbp_2_5m_to_3_5m": 4, "gbp_3_5m_to_5m": 3} + {"gbp_2m_to_2_5m": 40, "gbp_2_5m_to_3_5m": 1, "gbp_3_5m_to_5m": 1} ) summary = uk_high_value_home_evidence( household, @@ -596,7 +601,7 @@ def test_small_cell_suppression_protects_the_withheld_bands_together() -> None: "gbp_3_5m_to_5m", ] assert bands["over_gbp_5m"] == 0.0 - assert bands["total"] == pytest.approx(4_700.0) + assert bands["total"] == pytest.approx(4_200.0) def test_small_cell_suppression_applies_to_shares_summing_to_one() -> None: @@ -604,12 +609,12 @@ def test_small_cell_suppression_applies_to_shares_summing_to_one() -> None: sources = { "E12000007": set(range(30)), - "E12000008": {100, 101, 102}, - "E12000009": {200, 201}, + "E12000008": {100}, + "E12000009": {200}, } shares = {"E12000007": 0.9, "E12000008": 0.06, "E12000009": 0.04} shipped, withheld = _suppress_small_cells(shares, sources) - # Shares sum to one, so the two thin regions (five sources together) take + # Shares sum to one, so the two thin regions (two sources together) take # the third with them. assert withheld == ["E12000007", "E12000008", "E12000009"] assert set(shipped.values()) == {None} diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py index 9a71254b17..60c43351c5 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py @@ -276,16 +276,16 @@ def test_donor_excise_shares_read_the_diary_lines() -> None: assert tobacco["positive_share"] == pytest.approx((1.5 + 3.0) / weights.sum()) # Two donors carry tobacco and one P602 sits beside its lines: bands, and # the withheld share, never the counts. - assert tobacco["positive_support"] == "<10" + assert tobacco["positive_support"] == "<3" assert tobacco["clipped_at_one"] == 0 - assert tobacco["total_beside_lines"] == "<10" + assert tobacco["total_beside_lines"] == "<3" on_trade = receipt[ON_TRADE_SHARE] - assert on_trade["clipped_at_one"] == "<10" + assert on_trade["clipped_at_one"] == "<3" assert "total_beside_lines" not in on_trade # A share of the stakes has no published total to sit beside. lottery = receipt[LOTTERY_SHARE] assert lottery["total"] == "gambling_stakes" - assert lottery["positive_support"] == "<10" + assert lottery["positive_support"] == "<3" assert "total_beside_lines" not in lottery assert receipt[BETTING_SHARE]["share_of_denominator"] == pytest.approx( (1.5 * 0.25 + 2.0 * 1.0) / (1.5 * 0.25 + 2.0 * 1.5 + 3.0 * 1.0) @@ -495,7 +495,7 @@ def test_clip_holds_drawn_shares_to_the_unit_interval() -> None: assert held[TOBACCO_SHARE].tolist() == [0.2, 1.0, 0.0] assert held[ON_TRADE_SHARE].tolist() == [0.5] * 3 assert outside == { - TOBACCO_SHARE: "<10", + TOBACCO_SHARE: "<3", ON_TRADE_SHARE: 0, GAMBLING_SHARE: 0, LOTTERY_SHARE: 0, @@ -653,8 +653,8 @@ def test_split_receipt_separates_refunds_read_as_zero_from_other_gaps() -> None: ) # Two donors differ: a small cell, so no share. assert receipt["share_of_donors_whose_unclipped_parts_differ_from_p537"] == { - "by_over_a_penny_a_week": "<10", - "by_over_50p_a_week": "<10", + "by_over_a_penny_a_week": "<3", + "by_over_50p_a_week": "<3", } @@ -797,13 +797,14 @@ def test_negative_donor_consumption_is_floored_with_a_receipt() -> None: if column not in raised: assert floored[column].tolist() == [10.0, 20.0, 30.0] assert receipt["floor"] == 0.0 - # Counts of rows picked out by a negative spend are banded (microcosm#1164). - assert receipt["rows_raised"] == "<10" + # Counts of rows picked out by a negative spend are banded (microcosm#1164): + # three rows in all, two of housing and one of bus fares. + assert receipt["rows_raised"] == "3-9" assert receipt["remaining_negative_rows"] == 0 housing = receipt["columns"]["housing_water_and_electricity_consumption"] # Counts only: no donor value or statistic of the raised rows. - assert housing == {"rows_raised": "<10"} - assert receipt["columns"]["bus_fare_spending"] == {"rows_raised": "<10"} + assert housing == {"rows_raised": "<3"} + assert receipt["columns"]["bus_fare_spending"] == {"rows_raised": "<3"} assert receipt["columns"]["food_and_non_alcoholic_beverages_consumption"] == { "rows_raised": 0 } @@ -1124,32 +1125,34 @@ def test_fuel_flag_evidence_withholds_every_share_beside_a_thin_group() -> None: "diesel_spending": [0.0, 0.0, 0.0], } ) - # Twenty buyers and ten households without a vehicle, but three + # Twenty buyers and ten households without a vehicle, but two # fuel-free vehicle households. recipient = pd.DataFrame( { - "num_vehicles": [0] * 10 + [1] * 23, - "has_fuel_consumption": [False] * 10 + [True] * 20 + [False] * 3, + "num_vehicles": [0] * 10 + [1] * 22, + "has_fuel_consumption": [False] * 10 + [True] * 20 + [False] * 2, } ) evidence = fuel_flag_evidence( donor, recipient, - recipient_weights=np.ones(33), + recipient_weights=np.ones(32), ice_share_receipt={"rate": 0.9}, ) + # Three donors read exactly at the floor of three; each of their groups + # rests on one, so every share beside them is withheld. assert evidence["donor"] == { - "households": "<10", - "with_vehicles_share": "<10", - "positive_fuel_share": "<10", - "positive_fuel_share_among_vehicle_households": "<10", + "households": 3, + "with_vehicles_share": "<3", + "positive_fuel_share": "<3", + "positive_fuel_share_among_vehicle_households": "<3", } assert evidence["recipient"] == { - "households": 33, - "with_vehicles_share": "<10", - "flagged_share": "<10", - "flagged_share_among_vehicle_households": "<10", - "fuel_free_share_of_vehicles": "<10", + "households": 32, + "with_vehicles_share": "<3", + "flagged_share": "<3", + "flagged_share_among_vehicle_households": "<3", + "fuel_free_share_of_vehicles": "<3", } @@ -1184,8 +1187,8 @@ def test_fuel_flag_evidence_counts_the_cars_in_fuel_free_households() -> None: # Forty-two vehicles, ten of them in the ten fuel-free households. assert evidence["fuel_free_share_of_vehicles"] == pytest.approx(10 / 42) # Copies of one source household count once: the ten fuel-free rows are - # copies of three sources, so every share is withheld. - sources = list(range(22)) + [100, 100, 100, 100, 101, 101, 101, 102, 102, 102] + # copies of two sources, so every share is withheld. + sources = list(range(22)) + [100, 100, 100, 100, 100, 101, 101, 101, 101, 101] sources += list(range(200, 212)) withheld = fuel_flag_evidence( donor, @@ -1194,8 +1197,8 @@ def test_fuel_flag_evidence_counts_the_cars_in_fuel_free_households() -> None: ice_share_receipt={"rate": 0.96}, sources=sources, )["recipient"] - assert withheld["fuel_free_share_of_vehicles"] == "<10" - assert withheld["flagged_share"] == "<10" + assert withheld["fuel_free_share_of_vehicles"] == "<3" + assert withheld["flagged_share"] == "<3" def test_post_imputation_rake_fits_all_four_need_margins_in_kwh() -> None: @@ -1760,7 +1763,7 @@ def test_stage_transform_prices_bus_fares_from_journeys() -> None: assert on_trade["total"] == "restaurants_and_hotels_consumption" assert on_trade["frame"]["draws_outside_unit_interval"] == 0 # Seven donors' drinks pass P611 by pennies and are held at one. - assert on_trade["donor"]["clipped_at_one"] == "<10" + assert on_trade["donor"]["clipped_at_one"] == "3-9" assert "total_beside_lines" not in on_trade["donor"] gambling = shares["gambling_stakes_share_of_recreation"] assert gambling["total"] == "recreation_consumption" @@ -2087,9 +2090,9 @@ def test_division_capture_reads_each_division_against_its_donor() -> None: ) -def test_weighted_top_share_withholds_fewer_than_ten_households() -> None: +def test_weighted_top_share_withholds_fewer_than_three_households() -> None: """The top spenders' share of a weighted total (microcosm#1278); a share - resting on one to nine households is "<10", as every receipt count.""" + resting on one or two households is "<3", as every receipt count.""" from microcosm.build.uk_runtime.lcfs_consumption import weighted_top_share @@ -2098,7 +2101,8 @@ def test_weighted_top_share_withholds_fewer_than_ten_households() -> None: assert weighted_top_share(values, weights, fraction=0.10) == pytest.approx( 2_000.0 / 2_180.0 ) - assert weighted_top_share(values, weights, fraction=0.01) == "<10" + # The top 1% of two hundred is two households. + assert weighted_top_share(values, weights, fraction=0.01) == "<3" # Weight, not row count, sets the group: at double weight, eleven of the # top twenty households carry exactly a tenth of the 220 weight. heavy = np.where(values > 1.0, 2.0, 1.0) @@ -2128,22 +2132,22 @@ def test_weighted_top_shares_count_distinct_source_households() -> None: as_sources = weighted_top_shares( values, weights, fractions=(0.06,), sources=sources ) - assert as_sources[0.06] == "<10" + assert as_sources[0.06] == "<3" tail = division_tail(values, weights, values, weights, frame_sources=sources) # Each top 10% is twenty rows, the twelve leaders and eight more: ten # sources on the frame and twenty on the donor (one row per household), # so both ship. The frame's top 1% is two copies of one source. assert tail["top_10_percent"]["donor"] == pytest.approx(1_208.0 / 1_388.0) assert tail["top_10_percent"]["frame"] == pytest.approx(1_208.0 / 1_388.0) - assert tail["top_1_percent"]["frame"] == "<10" + assert tail["top_1_percent"]["frame"] == "<3" with pytest.raises(ValueError, match="align"): weighted_top_shares(values, weights, fractions=(0.1,), sources=sources[:5]) -def test_weighted_top_shares_withhold_a_difference_of_one_to_nine() -> None: +def test_weighted_top_shares_withhold_a_difference_of_one_or_two() -> None: """The top 1% leads the top 10%, so the two shares' difference is the - spend of the households between them: a larger fraction adding one to - nine sources to a shipped smaller one is withheld (microcosm#1306 review).""" + spend of the households between them: a larger fraction adding one or + two sources to a shipped smaller one is withheld (microcosm#1306 review).""" from microcosm.build.uk_runtime.lcfs_consumption import weighted_top_shares @@ -2152,36 +2156,36 @@ def shares(next_rows: int, next_weight: float) -> dict: weights = np.array([10.0] * 10 + [next_weight] * next_rows + [90.0] * 100) return weighted_top_shares(values, weights, fractions=(0.01, 0.10)) - # Ten households carry the top 1% and five more the rest of the top 10%. - five_more = shares(5, 180.0) - assert five_more[0.01] == pytest.approx(10_000.0 / 64_000.0) - assert five_more[0.10] == "<10" - # Ten more is enough. - ten_more = shares(10, 90.0) - assert ten_more[0.01] == pytest.approx(10_000.0 / 64_000.0) - assert ten_more[0.10] == pytest.approx(55_000.0 / 64_000.0) + # Ten households carry the top 1% and two more the rest of the top 10%. + two_more = shares(2, 450.0) + assert two_more[0.01] == pytest.approx(10_000.0 / 64_000.0) + assert two_more[0.10] == "<3" + # Three more is enough. + three_more = shares(3, 300.0) + assert three_more[0.01] == pytest.approx(10_000.0 / 64_000.0) + assert three_more[0.10] == pytest.approx(55_000.0 / 64_000.0) def test_weighted_top_shares_withhold_a_thin_rest_and_count_spenders() -> None: """The receipt's total ships beside the shares, so total x (1 - share) is - the spend outside the top group: a share is withheld when one to nine + the spend outside the top group: a share is withheld when one or two sources spend anything outside it. The floors count spenders, so zero rows in a group lend it nothing (microcosm#1306 review).""" from microcosm.build.uk_runtime.lcfs_consumption import weighted_top_shares - # Twenty leaders carry the top 10%; five others spend; 175 spend nothing. - values = np.array([100.0] * 20 + [7.0] * 5 + [0.0] * 175) + # Twenty leaders carry the top 10%; two others spend; 178 spend nothing. + values = np.array([100.0] * 20 + [7.0] * 2 + [0.0] * 178) shares = weighted_top_shares(values, np.ones(200), fractions=(0.10,)) - assert shares[0.10] == "<10" - # With ten spenders outside it, the share ships. - values = np.array([100.0] * 20 + [7.0] * 10 + [0.0] * 170) + assert shares[0.10] == "<3" + # With three spenders outside it, the share ships. + values = np.array([100.0] * 20 + [7.0] * 3 + [0.0] * 177) shares = weighted_top_shares(values, np.ones(200), fractions=(0.10,)) - assert shares[0.10] == pytest.approx(2_000.0 / 2_070.0) - # A top group of twenty rows of which four spend rests on four spenders. - values = np.array([100.0] * 4 + [0.0] * 196) + assert shares[0.10] == pytest.approx(2_000.0 / 2_021.0) + # A top group of twenty rows of which two spend rests on two spenders. + values = np.array([100.0] * 2 + [0.0] * 198) shares = weighted_top_shares(values, np.ones(200), fractions=(0.10,)) - assert shares[0.10] == "<10" + assert shares[0.10] == "<3" def test_division_capture_counts_source_households_not_copies() -> None: @@ -2190,9 +2194,9 @@ def test_division_capture_counts_source_households_not_copies() -> None: division_capture, ) - # The twenty leaders are copies of four source households. + # The twenty leaders are copies of two source households. frame_values = [100.0] * 20 + [1.0] * 180 - sources = [index // 5 for index in range(20)] + list(range(100, 280)) + sources = [index // 10 for index in range(20)] + list(range(100, 280)) draws = pd.DataFrame( {column: frame_values for column in UK_LCFS_COICOP_DIVISION_COLUMNS} ) @@ -2208,7 +2212,7 @@ def test_division_capture_counts_source_households_not_copies() -> None: as_sources = division_capture( draws, weights=np.ones(200), period_value=2024, donor=donor, sources=sources )["divisions"][column]["tail"]["top_10_percent"] - assert as_sources["frame"] == "<10" + assert as_sources["frame"] == "<3" assert as_sources["donor"] == pytest.approx(0.10) @@ -2292,8 +2296,8 @@ def test_division_capture_places_an_over_draw_in_the_tail() -> None: assert top_ten["frame_over_donor"] == pytest.approx(2_000.0 / 2_180.0 / 0.10) # Two households are the top 1% of two hundred: withheld on both sides. assert tail["top_1_percent"] == { - "frame": "<10", - "donor": "<10", + "frame": "<3", + "donor": "<3", "frame_over_donor": None, } assert "tail" not in capture["total"] diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_legacy_closure_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_legacy_closure_take_up.py index 1bbc702779..2101a2fcee 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_legacy_closure_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_legacy_closure_take_up.py @@ -105,7 +105,9 @@ def test_probabilities_hit_the_rate_at_the_weighted_share_already_claiming() -> np.testing.assert_allclose(probability[4:], 0.6) assert receipt["child_tax_credit"]["rate_source"] == "combination" assert receipt["jsa_income"]["rate_source"] == "all_households" - assert {entry["support"] for entry in receipt.values()} == {"<10"} + # Four sources carry the tax credit cohort and two the JSA one. + assert receipt["child_tax_credit"]["support"] == "3-9" + assert receipt["jsa_income"]["support"] == "<3" def test_probabilities_clip_where_the_claimants_exceed_the_rate() -> None: @@ -125,7 +127,8 @@ def test_a_cohort_counts_only_its_sources_of_positive_weight() -> None: """The fourth review of #1305: one carrier rule across the receipts. Twenty-four sources, five of them weighted: the cohort rests on five, so - its support and its flag read "<10", not "10-29". + its support reads "3-9", not "10-29", and its flag, with one side of p on + two weighted sources, reads "<3". """ n = 24 @@ -140,8 +143,8 @@ def test_a_cohort_counts_only_its_sources_of_positive_weight() -> None: great_britain=np.ones(n, dtype=bool), source_ids=np.arange(n), ) - assert receipt["esa_income"]["support"] == "<10" - assert receipt["esa_income"]["rate_unreachable"] == "<10" + assert receipt["esa_income"]["support"] == "3-9" + assert receipt["esa_income"]["rate_unreachable"] == "<3" _REPORTED = ( @@ -232,8 +235,8 @@ def test_units_outside_the_draw_keep_the_engine_default() -> None: "child_tax_credit": { "rate": 0.6, "rate_source": "combination", - "rate_unreachable": "<10", - "support": "<10", + "rate_unreachable": "<3", + "support": "<3", } } @@ -421,9 +424,9 @@ def test_p_is_measured_over_great_britain_and_applied_in_northern_ireland() -> N np.testing.assert_allclose(probability, (0.8 - 0.25) / (1 - 0.25)) -def test_an_unreachable_rate_is_flagged_only_on_ten_or_more_sources_a_side() -> None: +def test_an_unreachable_rate_is_flagged_only_on_three_or_more_sources_a_side() -> None: # Twenty of thirty units claim anyway: p (two thirds) exceeds DWP's rate, - # so none is drawn, and both sides of p rest on ten or more sources. + # so none is drawn, and both sides of p rest on three or more sources. kwargs = dict( combination=np.array(["esa_income"] * 30, dtype=object), drawn=np.ones(30, dtype=bool), @@ -438,19 +441,19 @@ def test_an_unreachable_rate_is_flagged_only_on_ten_or_more_sources_a_side() -> np.testing.assert_array_equal(probability, 0.0) assert receipt["esa_income"]["rate_unreachable"] is True assert receipt["esa_income"]["support"] == "30+" - # Thirty support copies of three households: the cell rests on fewer - # than ten sources, so neither the flag nor the support is given. + # Thirty support copies of two households: the cell rests on fewer + # than three sources, so neither the flag nor the support is given. _, receipt = lc.legacy_closure_claim_probabilities( - **kwargs, source_ids=np.arange(30) % 3 + **kwargs, source_ids=np.arange(30) % 2 ) - assert receipt["esa_income"]["rate_unreachable"] == "<10" - assert receipt["esa_income"]["support"] == "<10" + assert receipt["esa_income"]["rate_unreachable"] == "<3" + assert receipt["esa_income"]["support"] == "<3" # Thirty sources, one of them claiming anyway: the flag would say on which # side of the rate that one unit's weight share lies, so it is withheld. _, receipt = lc.legacy_closure_claim_probabilities( **dict(kwargs, claims_anyway=np.arange(30) < 1), source_ids=np.arange(30) ) - assert receipt["esa_income"]["rate_unreachable"] == "<10" + assert receipt["esa_income"]["rate_unreachable"] == "<3" def test_a_combination_without_great_britain_units_has_no_flag() -> None: @@ -463,7 +466,7 @@ def test_a_combination_without_great_britain_units_has_no_flag() -> None: great_britain=np.zeros(12, dtype=bool), source_ids=np.arange(12), ) - # Northern Ireland only: there is no p, so no flag, not "<10". + # Northern Ireland only: there is no p, so no flag, not "<3". assert receipt["esa_income"]["rate_unreachable"] is None @@ -481,9 +484,9 @@ def test_the_share_claiming_hides_a_small_side() -> None: frame, rates={"child_tax_credit": 0.01, "all": 0.8} ).evidence() assert evidence["great_britain_drawn_benunit_weight"] == pytest.approx(40.0) - assert evidence["great_britain_weighted_share_claiming_at_closure"] == "<10" + assert evidence["great_britain_weighted_share_claiming_at_closure"] == "<3" # The flag is withheld too: one side of p rests on two sources. - assert evidence["combinations"]["child_tax_credit"]["rate_unreachable"] == "<10" + assert evidence["combinations"]["child_tax_credit"]["rate_unreachable"] == "<3" def test_the_receipt_aggregates_cover_great_britain_only() -> None: @@ -530,34 +533,34 @@ def _graph_evidence(frame) -> dict: return transform.checkpoint_metadata()["evidence"] -def _copies_of_three_households(): - # Twelve support copies of three source households, eleven claiming - # anyway: p exceeds DWP's rate on twelve rows but on three sources. +def _copies_of_two_households(): + # Twelve support copies of two source households, eleven claiming + # anyway: p exceeds DWP's rate on twelve rows but on two sources. n = 12 return _frame( {"esa_income_reported": np.full(n, 100.0)}, would_claim_uc=np.arange(n) < 11, weights=np.ones(n), - source_ids=np.arange(n) % 3, + source_ids=np.arange(n) % 2, ) def test_the_stage_bands_support_copies_on_their_sources() -> None: - # UKDS disclosure control: neither the flag nor a band above "<10" for a - # cell three source households carry, however many rows copy them. + # UKDS disclosure control: neither the flag nor a band above "<3" for a + # cell two source households carry, however many rows copy them. combinations = lc.assign_uc_claim_at_legacy_closure( - _copies_of_three_households(), rates=_RATES + _copies_of_two_households(), rates=_RATES ).evidence()["combinations"] - assert combinations["esa_income"]["rate_unreachable"] == "<10" - assert combinations["esa_income"]["support"] == "<10" + assert combinations["esa_income"]["rate_unreachable"] == "<3" + assert combinations["esa_income"]["support"] == "<3" def test_the_graph_node_bands_support_copies_on_their_sources() -> None: # The same cell through the executor's input projection: the node declares # household_source_id, so a graph build counts sources too. - combinations = _graph_evidence(_copies_of_three_households())["combinations"] - assert combinations["esa_income"]["rate_unreachable"] == "<10" - assert combinations["esa_income"]["support"] == "<10" + combinations = _graph_evidence(_copies_of_two_households())["combinations"] + assert combinations["esa_income"]["rate_unreachable"] == "<3" + assert combinations["esa_income"]["support"] == "<3" def test_the_stage_refuses_a_frame_without_lineage() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_nts_bus_travel.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_nts_bus_travel.py index 29411af8e9..d818493919 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_nts_bus_travel.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_nts_bus_travel.py @@ -475,13 +475,13 @@ def test_fare_mix_lines_report_aggregates_and_withhold_thin_cells() -> None: "mean_fare_above_cap", } assert set(lines["under_cap"]["2023"]) == {"share_at_cap"} - assert lines["minimum_cell"] == {"boardings": 10, "households": 10} - # Above the cap on three households only: both 2022 lines are withheld, + assert lines["minimum_cell"] == {"boardings": 3, "households": 3} + # Above the cap on two households only: both 2022 lines are withheld, # however many boardings those households make. thin = stage.copy() few = ( stage["HouseholdID"] - .isin(sorted(set(stage.loc[full, "HouseholdID"]))[:3]) + .isin(sorted(set(stage.loc[full, "HouseholdID"]))[:2]) .to_numpy() ) thin.loc[full & few, "StageFareCost"] = 2.75 diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_pension_coherence.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_pension_coherence.py index 29d2d8c33e..461f44191c 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_pension_coherence.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_pension_coherence.py @@ -52,7 +52,7 @@ def test_the_forest_decides_membership_and_the_twin_rate_scales_the_amount() -> np.testing.assert_array_equal(bounded, [False, False, False, True, False, False]) -def test_a_receipt_withholds_amounts_resting_on_fewer_than_ten_households() -> None: +def test_a_receipt_withholds_amounts_resting_on_fewer_than_three_households() -> None: receipt = coherence_receipt( changed=np.array([True, True, False, True]), before=np.array([10.0, 20.0, 30.0, 40.0]), @@ -63,12 +63,12 @@ def test_a_receipt_withholds_amounts_resting_on_fewer_than_ten_households() -> N assert receipt == { "support": support_band(2), - "weighted_before": "<10", - "weighted_after": "<10", + "weighted_before": "<3", + "weighted_after": "<3", } -def test_a_receipt_gives_weighted_amounts_on_ten_or_more_households() -> None: +def test_a_receipt_gives_weighted_amounts_on_three_or_more_households() -> None: rows = 12 receipt = coherence_receipt( changed=np.ones(rows, dtype=bool), @@ -134,4 +134,4 @@ def test_the_spi_stage_applies_the_rule_to_its_recipients() -> None: } for rule in receipt.values(): assert rule["support"] == support_band(1) - assert rule["weighted_before"] == rule["weighted_after"] == "<10" + assert rule["weighted_before"] == rule["weighted_after"] == "<3" diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py index d39aba8f27..4d1af66ac7 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py @@ -48,8 +48,11 @@ def _frame(rows: list[tuple]) -> pd.DataFrame: def test_unweighted_shares_are_floored_and_small_sides_withheld() -> None: assert tool.floored_share(0, 100) == 0.0 assert tool.floored_share(37, 300) == 0.12 - assert tool.floored_share(5, 100) == "<10" - assert tool.floored_share(95, 100) == "<10" + # The floor of three: one or two records, or a share leaving out one or + # two, read "<3"; three read exactly. + assert tool.floored_share(2, 100) == "<3" + assert tool.floored_share(98, 100) == "<3" + assert tool.floored_share(3, 100) == 0.03 assert tool.floored_share(1, 0) is None @@ -58,56 +61,57 @@ def test_weighted_shares_count_distinct_source_households_on_both_sides() -> Non many = np.array([f"s{i}" for i in range(40)], dtype=object) mask = np.arange(40) < 20 assert tool.weighted_share(mask, weight, many) == 0.5 - # Twenty clones of three source households are still three households. - few = np.array([f"s{i % 3}" if i < 20 else f"t{i}" for i in range(40)]) - assert tool.weighted_share(mask, weight, few) == "<10" - assert tool.weighted_share(~mask, weight, few) == "<10" + # Twenty clones of two source households are still two households. + few = np.array([f"s{i % 2}" if i < 20 else f"t{i}" for i in range(40)]) + assert tool.weighted_share(mask, weight, few) == "<3" + assert tool.weighted_share(~mask, weight, few) == "<3" def test_one_small_cell_takes_a_complement_with_it() -> None: cells = { - "B": {"source_households": 4, "mean_monthly_rent": 900.0}, + "B": {"source_households": 2, "mean_monthly_rent": 900.0}, "C": {"source_households": 40, "mean_monthly_rent": 1000.0}, "D": {"source_households": 25, "mean_monthly_rent": 1100.0}, } out = tool.suppress_cells(cells) - assert out["B"] == {"withheld": "<10"} + assert out["B"] == {"withheld": "<3"} assert out["D"] == {"withheld": "complement"} assert out["C"] == {"source_households": 40, "mean_monthly_rent": 1000.0} two_small = tool.suppress_cells( - {**cells, "C": {"source_households": 6, "mean_monthly_rent": 1000.0}} + {**cells, "C": {"source_households": 1, "mean_monthly_rent": 1000.0}} ) - assert two_small["B"] == two_small["C"] == {"withheld": "<10"} + # Two and one households are three together: no complement is needed. + assert two_small["B"] == two_small["C"] == {"withheld": "<3"} assert two_small["D"]["source_households"] == 30 -def test_thin_cells_resting_on_under_ten_together_take_a_complement(): - """Two withheld cells of three and four households are seven together.""" +def test_thin_cells_resting_on_under_three_together_take_a_complement(): + """Two withheld cells of one household each are two together.""" out = tool.suppress_cells( { - "B": {"source_households": 3, "mean_monthly_rent": 900.0}, - "C": {"source_households": 4, "mean_monthly_rent": 950.0}, + "B": {"source_households": 1, "mean_monthly_rent": 900.0}, + "C": {"source_households": 1, "mean_monthly_rent": 950.0}, "D": {"source_households": 25, "mean_monthly_rent": 1100.0}, "E": {"source_households": 40, "mean_monthly_rent": 1300.0}, } ) - assert out["B"] == out["C"] == {"withheld": "<10"} + assert out["B"] == out["C"] == {"withheld": "<3"} assert out["D"] == {"withheld": "complement"} assert out["E"]["source_households"] == 40 -def test_a_cell_with_rows_but_no_counted_carrier_reads_under_ten(): - """microcosm#1305 re-review: zero counted carriers is fewer than ten.""" +def test_a_cell_with_rows_but_no_counted_carrier_reads_under_three(): + """microcosm#1305 re-review: zero counted carriers is fewer than three.""" assert tool.suppress_cells( {"all": {"source_households": 0, "mean_monthly_rent": 900.0}} - ) == {"all": {"withheld": "<10"}} + ) == {"all": {"withheld": "<3"}} weight = np.ones(20) mask = np.arange(20) < 10 blank = np.array([""] * 10 + [f"s{i}" for i in range(10)], dtype=object) - assert tool.weighted_share(mask, weight, blank) == "<10" - assert tool.unweighted_share(mask, blank) == "<10" + assert tool.weighted_share(mask, weight, blank) == "<3" + assert tool.unweighted_share(mask, blank) == "<3" # An empty side has nothing to describe. assert tool.weighted_share(np.ones(20, dtype=bool), weight, blank[::-1]) == 1.0 @@ -117,8 +121,8 @@ def _rent_weighting(carriers=True, *, thin_brma=False, per_group=12): row, over 40 households. The English rows cover households 0-19, the Welsh ones 20-39 and the - BRMA rows all forty; with ``thin_brma`` the first BRMA row covers 0-2 - only. Each household is its own source household. + BRMA rows all forty; with ``thin_brma`` the first BRMA row covers 0-1 + only, under the floor of three. Each household is its own source household. """ metadata = [ @@ -144,12 +148,12 @@ def _rent_weighting(carriers=True, *, thin_brma=False, per_group=12): rows[per_group : 2 * per_group, 20:] = 1.0 rows[2 * per_group : 3 * per_group] = 1.0 if thin_brma: - rows[2 * per_group, 3:] = 0.0 + rows[2 * per_group, 2:] = 0.0 rows[-1] = 5.0 weights = np.where(np.arange(40) < 20, 105.0, 70.0) / 20 targets = np.array( [100.0] * (2 * per_group) - + [15.75 if thin_brma and i == 0 else 175.0 for i in range(per_group)] + + [10.5 if thin_brma and i == 0 else 175.0 for i in range(per_group)] + [1.0] ) return tool.Weighting( @@ -177,7 +181,7 @@ def test_rent_rows_are_scored_by_family_and_nation() -> None: assert "rows_withheld" not in summary["all"] -def test_a_rent_row_on_fewer_than_ten_households_is_counted_never_summarised(): +def test_a_rent_row_on_fewer_than_three_households_is_counted_never_summarised(): """microcosm#1305 re-review: the rent rows follow the build's BRMA rule. With the thin row in its groups, the median and the within-10% count @@ -185,7 +189,7 @@ def test_a_rent_row_on_fewer_than_ten_households_is_counted_never_summarised(): """ summary, rows = tool.rent_row_fit(_rent_weighting(thin_brma=True)) - assert rows[24]["source_households"] == 3 + assert rows[24]["source_households"] == 2 assert summary["all"]["rows"] == 35 and summary["all"]["rows_withheld"] == 1 brma = summary["ons.rent.private_rent_brma Scotland"] assert brma["rows"] == 11 and brma["rows_withheld"] == 1 @@ -346,7 +350,7 @@ def test_the_matched_change_reads_each_row_against_its_spine_value() -> None: frame.loc[0, "brma"] = "SWANSEA" out = tool.matched_change(frame) assert out["gb_rows_redrawn"] == 1.0 - assert out["gb_rows_whose_brma_changed"] == "<10" + assert out["gb_rows_whose_brma_changed"] == "<3" assert out["region_level_at_design_weights"] == {"WALES": 1.1} @@ -379,21 +383,21 @@ def _summary(frame: pd.DataFrame, **kwargs) -> dict: return summary -def test_a_thin_region_category_cell_reads_under_ten_and_withholds_a_complement(): +def test_a_thin_region_category_cell_reads_under_three_and_withholds_a_complement(): rows = ( [_renter(f"b{i}", bedrooms=1) for i in range(12)] + [_renter(f"c{i}", bedrooms=2) for i in range(15)] - + [_renter(f"d{i}", bedrooms=3) for i in range(4)] + + [_renter(f"d{i}", bedrooms=3) for i in range(2)] + [_renter(f"e{i}", bedrooms=4) for i in range(20)] ) london = _summary(_frame(rows))["rents_by_cell"]["region"]["LONDON"] - assert london["D"] == {"withheld": "<10"} + assert london["D"] == {"withheld": "<3"} assert london["B"] == {"withheld": "complement"} assert london["C"]["source_households"] == 20 assert london["all"]["mean_monthly_rent"] == 1000.0 -def test_district_groups_need_ten_cells_of_ten_households(): +def test_district_groups_need_ten_cells_of_three_households(): pipr = {("la", f"E0900000{i}", "B"): 1_000.0 for i in range(1, 10)} rows = [ (*_renter(f"k{area}-{i}")[:6], f"E0900000{area}", f"k{area}-{i}") @@ -406,56 +410,58 @@ def test_district_groups_need_ten_cells_of_ten_households(): # Nine districts pass the household floor: too few to summarise. assert group == { "withheld": "fewer than 10 cells", - "cells_under_10_source_households": 0, + "cells_under_floor_source_households": 0, } assert len(audit["pipr_by_district_and_bedrooms"]) == 9 -def test_the_top_one_percent_share_needs_ten_rows_and_ten_households(): +def test_the_top_one_percent_share_needs_three_rows_and_three_households(): # 2,000 renters: the top 20 rows are clones of two households. rows = [_renter(f"r{i}") for i in range(1_980)] rows += [_renter(f"top{i % 2}", weight=50.0) for i in range(20)] weights = _summary(_frame(rows))["weights"] - assert weights["top_1pct_weight_share"] == "<10" + assert weights["top_1pct_weight_share"] == "<3" rows[-20:] = [_renter(f"top{i}", weight=50.0) for i in range(20)] assert isinstance(_summary(_frame(rows))["weights"]["top_1pct_weight_share"], float) - assert _summary(_frame([_renter(f"r{i}") for i in range(9)]))["weights"] == { - "withheld": "<10" + assert _summary(_frame([_renter(f"r{i}") for i in range(2)]))["weights"] == { + "withheld": "<3" } def test_coherence_counts_households_not_clone_rows(): - # 8 of 800 households, 25 clones each, report HB above their rent. + # 2 of 800 households, 25 clones each, report HB above their rent: 50 + # rows, but two households, under the floor of three. frame = _frame([_renter(f"h{i}") for i in range(800) for _ in range(25)]) frame.loc[ - frame["source_key"].isin([f"h{i}" for i in range(8)]), + frame["source_key"].isin([f"h{i}" for i in range(2)]), "housing_benefit_reported", ] = 20_000.0 out = _summary(frame)["coherence"]["housing_benefit_reported_above_rent"] - assert out == {"weighted_share": "<10", "unweighted_share": "<10"} + assert out == {"weighted_share": "<3", "unweighted_share": "<3"} def test_spine_values_count_frs_channel_households_only(): frame = _frame( - [_renter(f"f{i}") for i in range(4)] + [_renter(f"s{i}") for i in range(6)] + [_renter(f"f{i}") for i in range(2)] + [_renter(f"s{i}") for i in range(6)] ) - frame.loc[4:, "channel"] = "spi" + frame.loc[2:, "channel"] = "spi" every = _summary(frame)["rents_by_cell"]["nation"]["England"] - assert every["source_households"] == 10 + assert every["source_households"] == 8 frs = _summary(frame, frs_carriers=True)["rents_by_cell"]["nation"]["England"] - assert frs == {"withheld": "<10"} - # A cell of SPI rows only has no FRS-channel carrier: it reads "<10". + assert frs == {"withheld": "<3"} + # A cell of SPI rows only has no FRS-channel carrier: it reads "<3". spi = frame.assign(channel="spi") assert _summary(spi, frs_carriers=True)["rents_by_cell"]["nation"] == { - "England": {"withheld": "<10"} + "England": {"withheld": "<3"} } def test_zero_weight_rows_carry_nothing(): + # Twelve rows, ten of them of zero weight: two carriers, under the floor. frame = _frame([_renter(f"r{i}") for i in range(12)]) - frame.loc[:2, "weight"] = 0.0 + frame.loc[:9, "weight"] = 0.0 cell = _summary(frame)["rents_by_cell"]["nation"]["England"] - assert cell == {"withheld": "<10"} + assert cell == {"withheld": "<3"} def _work_tree(path): @@ -543,10 +549,11 @@ def refuse() -> str: def _synthetic_run(tmp_path): """A run directory, its pool table and an empty feed for ``main``. - Thirty London private renters in category B. Eight are FRS-channel - households and 22 SPI-channel rows, so the cell's spine values rest on - eight FRS carriers and its built values on thirty source households. The - local-authority rent row covers all thirty; the BRMA row three. + Thirty London private renters in category B. Two are FRS-channel + households and 28 SPI-channel rows, so the cell's spine values rest on + two FRS carriers, under the floor of three, and its built values on thirty + source households. The local-authority rent row covers all thirty; the + BRMA row two. """ pytest.importorskip("tables") from microcosm.calibrate import Target, TargetSet, build_constraint_matrix @@ -556,7 +563,7 @@ def _synthetic_run(tmp_path): n = 30 ids = np.arange(100, 100 + n, dtype=np.int64) keys = np.array([f"2024:{i}" for i in range(n)], dtype=object) - channel = np.array(["frs"] * 8 + ["spi"] * 22) + channel = np.array(["frs"] * 2 + ["spi"] * 28) rent = np.full(n, 12_000.0) household = pd.DataFrame( { @@ -588,11 +595,11 @@ def _synthetic_run(tmp_path): EntitySchema(group_entities=("household",)), {"household": Weights(np.ones(n), WeightKind.DESIGN)}, ) - thin = np.arange(n) < 3 + thin = np.arange(n) < 2 targets = TargetSet( [ Target("rent_la", "household", lambda f: rent, 360_000.0), - Target("rent_brma", "household", lambda f: rent * thin, 36_000.0), + Target("rent_brma", "household", lambda f: rent * thin, 24_000.0), ] ) (run / "uk.full.problem.problem.artifact").write_bytes( @@ -653,7 +660,7 @@ def test_main_floors_rent_rows_and_spine_values_on_a_synthetic_run(tmp_path): built = head["design_weights"]["rents_by_cell"]["region"]["LONDON"] assert built["B"]["source_households"] == 30 spine = head["design_weights_spine_values"]["rents_by_cell"]["region"]["LONDON"] - assert spine["B"] == {"withheld": "<10"} + assert spine["B"] == {"withheld": "<3"} private = json.loads((audit / "private_rent_audit.json").read_text()) rows = private["runs"]["head"]["rent_rows"]["design"] - assert [row["source_households"] for row in rows] == [30, 3] + assert [row["source_households"] for row in rows] == [30, 2] diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_property_purchases.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_property_purchases.py index 37977404b4..b0346a2ddf 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_property_purchases.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_property_purchases.py @@ -167,7 +167,7 @@ def test_prices_fit_the_count_and_value_within_the_floor_and_the_stock() -> None assert np.all(prices <= inputs["stock"] + 1e-6) assert not bought[:6].any() # below the floor, or at zero weight assert result.receipt["fitted_value"] == pytest.approx(target.value, rel=1e-8) - assert result.receipt["purchaser_support"] in {"<10", "10-29", "30+"} + assert result.receipt["purchaser_support"] in {"<3", "3-9", "10-29", "30+"} def test_the_threshold_applies_outside_the_fit_regions() -> None: @@ -178,29 +178,34 @@ def test_the_threshold_applies_outside_the_fit_regions() -> None: outside = result.prices[-50:] > 0 # Scotland and Wales buy at the same hazard and threshold, unfitted. assert outside.any() - assert result.receipt["outside_sdlt_regions_support"] in {"<10", "10-29", "30+"} + assert result.receipt["outside_sdlt_regions_support"] in { + "<3", + "3-9", + "10-29", + "30+", + } -def test_receipt_cells_on_fewer_than_ten_sources_are_banded() -> None: - # UKDS disclosure control: a weighted figure one to nine source - # households carry is "<10", and so is anything derived from it. +def test_receipt_cells_on_fewer_than_three_sources_are_banded() -> None: + # UKDS disclosure control: a weighted figure one or two source + # households carry is "<3", and so is anything derived from it. inputs = _inputs() inputs["sdlt_mask"] = np.ones_like(inputs["sdlt_mask"]) inputs["sdlt_mask"][-50:] = False n = len(inputs["stock"]) - # Every row outside the fit regions belongs to one of three households. + # Every row outside the fit regions belongs to one of two households. sources = np.arange(n) - sources[-50:] = 10_000 + np.arange(50) % 3 + sources[-50:] = 10_000 + np.arange(50) % 2 result = pp.impute_property_purchase_prices( **{**inputs, "source_ids": sources}, target=_target() ) receipt = result.receipt assert (result.prices[-50:] > 0).any() - assert receipt["outside_sdlt_regions_support"] == "<10" - assert receipt["purchases_outside_sdlt_regions_weight"] == "<10" + assert receipt["outside_sdlt_regions_support"] == "<3" + assert receipt["purchases_outside_sdlt_regions_weight"] == "<3" assert receipt["fitted_value"] == pytest.approx(9e6, rel=1e-8) - # Every fit-region row belongs to one of five households. - few = np.arange(n) % 5 + # Every fit-region row belongs to one of two households. + few = np.arange(n) % 2 result = pp.impute_property_purchase_prices( **{**inputs, "source_ids": few}, target=_target() ) @@ -212,8 +217,8 @@ def test_receipt_cells_on_fewer_than_ten_sources_are_banded() -> None: "event_rate", "price_scale", ): - assert result.receipt[field] == "<10", field - assert result.receipt["purchaser_support"] == "<10" + assert result.receipt[field] == "<3", field + assert result.receipt["purchaser_support"] == "<3" def _capped_inputs(capped: int, uncapped: int) -> dict[str, np.ndarray]: @@ -246,37 +251,37 @@ def _capped_receipt(capped: int, uncapped: int, sources: np.ndarray) -> dict: def test_the_stock_cap_share_counts_each_side_on_its_sources() -> None: - # Twelve capped rows past ten, but on two sources: the share is withheld, - # though counting rows would give it. + # Twelve capped rows past three, but on two sources: the share is + # withheld, though counting rows would give it. receipt = _capped_receipt(12, 28, np.r_[np.arange(12) % 2, 100 + np.arange(28)]) - assert receipt["stock_cap_support"] == "<10" - assert receipt["weighted_share_at_stock_cap"] == "<10" - # Three uncapped rows that copy capped sources: the uncapped side rests on - # three sources, so the share, which would give its weight back, is + assert receipt["stock_cap_support"] == "<3" + assert receipt["weighted_share_at_stock_cap"] == "<3" + # Three uncapped rows that copy two capped sources: the uncapped side rests + # on two sources, so the share, which would give its weight back, is # withheld too. - receipt = _capped_receipt(37, 3, np.r_[np.arange(37), np.arange(3)]) + receipt = _capped_receipt(37, 3, np.r_[np.arange(37), np.array([0, 1, 1])]) assert receipt["stock_cap_support"] == "10-49" - assert receipt["weighted_share_at_stock_cap"] == "<10" - # Both sides on ten or more sources: the share is given. + assert receipt["weighted_share_at_stock_cap"] == "<3" + # Both sides on three or more sources: the share is given. receipt = _capped_receipt(12, 28, np.arange(40)) assert receipt["weighted_share_at_stock_cap"] == pytest.approx(12 / 40) -def test_a_fit_on_fewer_than_ten_sources_withholds_the_share_at_the_cap() -> None: +def test_a_fit_on_fewer_than_three_sources_withholds_the_share_at_the_cap() -> None: # At the stock cap every purchaser buys at its stock, so a share of 1.0 - # beside a "<10" fit would still say so: it is withheld. + # beside a "<3" fit would still say so: it is withheld. result = pp.impute_property_purchase_prices( **_capped_inputs(12, 0), target=_target(transactions=12.0, value=12 * 40_000.0 / 0.9), - source_ids=np.arange(12) % 5, + source_ids=np.arange(12) % 2, ) assert result.receipt["value_fit"] == "stock_cap" - assert result.receipt["purchaser_support"] == "<10" - assert result.receipt["weighted_share_at_stock_cap"] == "<10" + assert result.receipt["purchaser_support"] == "<3" + assert result.receipt["weighted_share_at_stock_cap"] == "<3" def test_an_empty_cell_reads_zero() -> None: - # No purchase outside the fit regions: 0 beside a zero weight, not "<10". + # No purchase outside the fit regions: 0 beside a zero weight, not "<3". receipt = _capped_receipt(12, 28, np.arange(40)) assert receipt["purchases_outside_sdlt_regions_weight"] == 0.0 assert receipt["outside_sdlt_regions_support"] == 0 @@ -305,8 +310,8 @@ def test_the_eligible_weight_hides_a_small_side_that_does_not_buy() -> None: # source's weight back, and so would the event rate: both are withheld. receipt = _non_buyer_receipt(38, 2, np.r_[np.arange(38), 100, 100]) assert receipt["fitted_transactions"] == pytest.approx(38.0) - assert receipt["eligible_owner_weight"] == "<10" - assert receipt["event_rate"] == "<10" + assert receipt["eligible_owner_weight"] == "<3" + assert receipt["event_rate"] == "<3" # Twenty-two others on their own sources: both are given. receipt = _non_buyer_receipt(38, 22, np.arange(60)) assert receipt["eligible_owner_weight"] == pytest.approx(60.0) @@ -546,7 +551,7 @@ def test_the_stage_refuses_a_stored_output_or_a_missing_lineage() -> None: def _copies_frame(): - """Twelve London households, support copies of three sources, each with + """Twelve London households, support copies of two sources, each with other residential stock to buy with.""" n = 12 @@ -554,7 +559,7 @@ def _copies_frame(): household = pd.DataFrame( { "household_id": ids, - "household_source_id": np.arange(n, dtype="int64") % 3, + "household_source_id": np.arange(n, dtype="int64") % 2, "region": pd.array(["LONDON"] * n, dtype="string"), "other_residential_property_value": np.full(n, 200_000.0), "non_residential_property_value": np.zeros(n), @@ -618,16 +623,16 @@ def _graph_evidence(frame) -> dict: def test_support_copies_band_on_their_sources_in_the_stage_and_the_node() -> None: - # UKDS disclosure control: twelve purchasers past ten rows, but three - # sources, so the support reads "<10", in a direct call and through the + # UKDS disclosure control: twelve purchasers past three rows, but two + # sources, so the support reads "<3", in a direct call and through the # production node as a graph build runs it (it declares the lineage). frame = _copies_frame() direct = pp.impute_property_purchases(frame, targets=_copies_targets()) for evidence in (direct.evidence(), _graph_evidence(frame)): kind = evidence["kinds"][0] assert kind["property_type"] == "additional_residential" - assert kind["purchaser_support"] == "<10" - assert kind["fitted_transactions"] == "<10" + assert kind["purchaser_support"] == "<3" + assert kind["fitted_transactions"] == "<3" @pytest.mark.parametrize("period", ["2023", "2030", "2024-25"]) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py index 8e0410df34..4dd6419629 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py @@ -19,8 +19,12 @@ ("count", "expected"), [ (0, 0), - (1, "<10"), - (9, "<10"), + # The floor of three (María's ruling of 2026-10-29): one or two are + # withheld, three to nine read exactly, then the rounding starts. + (1, "<3"), + (2, "<3"), + (3, 3), + (9, 9), (10, 10), (14, 10), (25, 30), @@ -38,7 +42,9 @@ def test_rounded_count(count, expected) -> None: ("count", "expected"), [ (0, 0), - (3, "<10"), + (2, "<3"), + (3, "3-9"), + (9, "3-9"), (10, "10-49"), (49, "10-49"), (50, "50-99"), @@ -54,10 +60,19 @@ def test_extreme_count(count, expected) -> None: @pytest.mark.parametrize( ("count", "expected"), - [(0, 0), (1, "<10"), (9, "<10"), (10, "10-29"), (29, "10-29"), (30, "30+")], + [ + (0, 0), + (1, "<3"), + (2, "<3"), + (3, "3-9"), + (9, "3-9"), + (10, "10-29"), + (29, "10-29"), + (30, "30+"), + ], ) def test_support_band(count, expected) -> None: - # An empty cell reads 0, as the other counts here, never "<10" beside a + # An empty cell reads 0, as the other counts here, never "<3" beside a # zero weight. assert support_band(count) == expected @@ -86,7 +101,8 @@ def test_floored_share_refuses_a_share_outside_zero_one() -> None: def test_small_cell_share() -> None: assert small_cell_share(0.0, 0) == 0.0 - assert small_cell_share(0.01, 9) == "<10" + assert small_cell_share(0.01, 2) == "<3" + assert small_cell_share(0.01, 3) == pytest.approx(0.01) assert small_cell_share(0.25, 40) == pytest.approx(0.25) with pytest.raises(ValueError, match="negative"): small_cell_share(0.1, -1) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_regional_home_values.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_regional_home_values.py index c44f1e0908..b47be01658 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_regional_home_values.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_regional_home_values.py @@ -342,11 +342,12 @@ def _london_copies_at_the_cap(monkeypatch): def test_the_cap_cell_is_banded_on_its_source_households(monkeypatch) -> None: # UKDS disclosure control: twelve rows past ten, but three sources, so the - # cell reads "<10", directly and through the production node as a graph - # build runs it (the node declares household_source_id). + # cell reads the sources' band "3-9", not the rows' "10-29", directly and + # through the production node as a graph build runs it (the node declares + # household_source_id). frame = _london_copies_at_the_cap(monkeypatch) - assert rhv.assign_regional_home_values(frame).receipt["sources_at_cap"] == "<10" - assert _graph_evidence(frame)["sources_at_cap"] == "<10" + assert rhv.assign_regional_home_values(frame).receipt["sources_at_cap"] == "3-9" + assert _graph_evidence(frame)["sources_at_cap"] == "3-9" def test_the_stage_refuses_a_frame_without_lineage() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_salary_sacrifice.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_salary_sacrifice.py index 560e190489..679e9692c0 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_salary_sacrifice.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_salary_sacrifice.py @@ -867,9 +867,10 @@ def test_the_stage_adds_bonus_sacrifice_beside_pay( assert receipt["pay"] == "unchanged: a sacrificed bonus is never received" assert receipt["spi_drawn_support"] == 0 assert receipt["target_base"] == 90_000.0 - # Five sources: the base and the band are withheld under ten. - assert receipt["participant_support"] == "<10" - assert receipt["projected_base"] == "<10" + # Five sources: above the floor of three, so the band reads "3-9" and the + # base is given: five bonuses of 18,000 above the threshold. + assert receipt["participant_support"] == "3-9" + assert receipt["projected_base"] == pytest.approx(90_000.0) assert receipt["candidate_support"] == "10-29" assert BONUS_SACRIFICE_OUTPUT in UKSalarySacrificeStageTransform.output_columns() diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_single_year_ages.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_single_year_ages.py index d5e7768c8b..ff3d66552e 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_single_year_ages.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_single_year_ages.py @@ -97,18 +97,21 @@ def test_the_report_counts_weighted_persons_and_withholds_thin_cells(): assert report["minimum_source_households"] == 2 -def test_the_default_floor_is_ten_source_households(): +def test_the_default_floor_is_three_source_households(): + # The build's floor (María's ruling of 2026-10-29): two source households + # are withheld. person, household, weights = _file( - ages=[40] * 9, - genders=["MALE"] * 9, - households=list(range(1, 10)), - sources=list(range(1, 10)), - weights=[1.0] * 9, + ages=[40] * 2, + genders=["MALE"] * 2, + households=[1, 2], + sources=[1, 2], + weights=[1.0] * 2, ) report = single_year_age_report(person, household, weights, ons=ONS) - assert report["sexes"]["male"]["single_years"]["40"] == {"source_households": "<10"} + assert report["sexes"]["male"]["single_years"]["40"] == {"source_households": "<3"} + assert report["minimum_source_households"] == 3 def test_the_report_refuses_a_file_it_cannot_count_carriers_in(): diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_band_donors.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_band_donors.py index fac3ec7386..452f40f138 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_band_donors.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_band_donors.py @@ -549,12 +549,12 @@ def test_resample_gives_carriers_band_conditional_leaves_and_receipts() -> None: rows = {row["lower_bound"]: row for row in receipt["bands"]} assert rows[2_000_000]["pool_composite_records"] > 0 # No drawn record's own value, such as a band's lowest or highest, is in - # the receipt, and a band whose carriers drew fewer than ten records + # the receipt, and a band whose carriers drew fewer than three records # withholds its mean (UKDS disclosure control). for row in receipt["bands"]: assert "realized_min_total_income" not in row assert "realized_max_total_income" not in row - assert row["realized_mean_total_income"] == "<10" + assert row["realized_mean_total_income"] == "<3" assert all(row["carriers"] == 1 for row in receipt["bands"]) # A carrier matches its region only where that regional band pool holds diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py index 91fab4b43d..aae637b476 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py @@ -2350,7 +2350,7 @@ def gate(families, **counts): assert _passed(gate(good)) # A reporter not claiming, or a unit outside the draw changed, fails. assert not gate(good, reporters=1).passed - assert not gate(good, outside="<10").passed + assert not gate(good, outside="<3").passed # The reachable pools miss DWP's count by more than the tolerance. assert not gate( {**good, "SINGLE": family(3_000.0, 3_300.0, 3_020.0, 2_500.0, 2_700.0)} @@ -2359,9 +2359,9 @@ def gate(families, **counts): assert not gate( {**good, "LONE_PARENT": family(2_100.0, 1_400.0, 1_100.0, 0.0, 0.0)} ).passed - # A caseload resting on fewer than ten sources cannot be checked: it is + # A caseload resting on fewer than three sources cannot be checked: it is # flagged, never failed (María's ruling of 2026-10-26); one missing fails. - thin = gate({**good, "SINGLE": family(3_000.0, "<10", 1.0, 0.0, 0.0)}) + thin = gate({**good, "SINGLE": family(3_000.0, "<3", 1.0, 0.0, 0.0)}) assert thin.passed, thin.failures assert thin.details["family_types_unchecked_small_cells"] == ["SINGLE"] assert gate(good).details["family_types_unchecked_small_cells"] == [] @@ -2764,13 +2764,13 @@ def test_property_purchases_gate_holds_each_kind_to_hmrc_within_the_contract() - ) -def test_property_purchases_gate_flags_a_kind_on_fewer_than_ten_buyers() -> None: - """A kind whose buyers rest on fewer than ten sources prints "<10": it is +def test_property_purchases_gate_flags_a_kind_on_fewer_than_three_buyers() -> None: + """A kind whose buyers rest on fewer than three sources prints "<3": it is flagged unchecked, never failed (María's ruling of 2026-10-26).""" thin = _purchases_receipt() name = thin["kinds"][0]["property_type"] thin["kinds"][0].update( - fitted_transactions="<10", fitted_value="<10", value_shortfall_share="<10" + fitted_transactions="<3", fitted_value="<3", value_shortfall_share="<3" ) result = _gate("uk_stage_property_purchases_fit", thin) assert result.passed, result.failures @@ -2801,7 +2801,7 @@ def _home_values_receipt() -> dict: (lambda r: r.update(rows=40), "more rows"), (lambda r: r.update(sources_at_cap=1), "value cap"), # A band past the limit fails as plainly as the count it stands for. - (lambda r: r.update(sources_at_cap="<10"), "value cap"), + (lambda r: r.update(sources_at_cap="<3"), "value cap"), (lambda r: r.update(knots_basis_year=2023), "basis year"), (lambda r: r["ranking"].update(rank_basis="national"), "ranking basis"), (lambda r: r.update(weighted_value_after=0.0), "not positive"), @@ -2818,14 +2818,14 @@ def test_regional_home_values_gate_holds_the_ranking_contract(mutate, fragment) assert any(fragment in failure for failure in result.failures), result.failures -def test_regional_home_values_gate_flags_a_region_of_fewer_than_ten_rows() -> None: - """A region the receipt prints "<10" rewrote one to nine rows: not empty, +def test_regional_home_values_gate_flags_a_region_of_fewer_than_three_rows() -> None: + """A region the receipt prints "<3" rewrote one or two rows: not empty, and flagged rather than failed (María's ruling of 2026-10-26).""" receipt = _home_values_receipt() - receipt["rows_rewritten_by_region"]["W92000004"] = "<10" + receipt["rows_rewritten_by_region"]["W92000004"] = "<3" result = _gate("uk_stage_regional_home_values_ranking", receipt) assert result.passed, result.failures - assert result.details["regions_rewritten_under_ten"] == ["W92000004"] + assert result.details["regions_rewritten_under_floor"] == ["W92000004"] assert result.details["sources_at_cap_unchecked"] is False @@ -2844,8 +2844,8 @@ def _legacy_closure_receipt() -> dict: "jsa_income": { "rate": 0.6, "rate_source": "all_households", - "rate_unreachable": "<10", - "support": "<10", + "rate_unreachable": "<3", + "support": "<3", }, }, } @@ -2856,7 +2856,7 @@ def test_legacy_closure_gate_reads_what_the_receipt_prints() -> None: assert _passed(_gate(gate_id, _legacy_closure_receipt())) # A thin drawn cohort prints its share withheld. withheld = _legacy_closure_receipt() - withheld["great_britain_weighted_share_claiming_at_closure"] = "<10" + withheld["great_britain_weighted_share_claiming_at_closure"] = "<3" flagged = _gate(gate_id, withheld) assert _passed(flagged) # What it could not read is flagged (María's ruling of 2026-10-26). @@ -3046,7 +3046,7 @@ def failing(change, fragment: str) -> None: "volume weights", ) failing( - lambda e, s: s[tobacco]["frame"].update(draws_outside_unit_interval="<10"), + lambda e, s: s[tobacco]["frame"].update(draws_outside_unit_interval="<3"), "left [0, 1]", ) failing( @@ -3057,9 +3057,9 @@ def failing(change, fragment: str) -> None: lambda e, s: s[tobacco]["donor"].update(total_beside_lines=0.02), "beside", ) - # A residual withheld for resting on under ten donors is under the ceiling. + # A residual withheld for resting on under three donors is under the ceiling. withheld = copy.deepcopy(shares) - withheld[tobacco]["donor"]["total_beside_lines"] = "<10" + withheld[tobacco]["donor"]["total_beside_lines"] = "<3" flagged = run(receipt, withheld) assert flagged.passed assert flagged.details["residuals_unchecked_small_cells"] == [tobacco] @@ -3169,7 +3169,7 @@ def failing(change, fragment: str) -> None: # A stake draw far off the seen households' mean, which the anchoring # would otherwise hide. failing(lambda r, e: lottery(r, e).update(amount_scale=3.0), "amount scale") - failing(lambda r, e: lottery(r, e).update(added_without_stake="<10"), "no stake") + failing(lambda r, e: lottery(r, e).update(added_without_stake="<3"), "no stake") failing( lambda r, e: lottery(r, e)["propensity"].update(positive_support="10-29"), "rest on", @@ -3265,16 +3265,16 @@ def test_apprentice_gate_holds_the_draw_to_the_contract_rate() -> None: def test_apprentice_gate_flags_its_small_cells_without_failing() -> None: - """A "<10" figure is named unchecked, never failed (María's ruling, 10-26).""" + """A "<3" figure is named unchecked, never failed (María's ruling, 10-26).""" gate_id = "uk_stage_frs_person_draws_apprentices" thin_flags = _gate( gate_id, _apprentice_receipt( - flagged_support="<10", - realized_mass="<10", - realization_deviation="<10", - implied_relief="<10", + flagged_support="<3", + realized_mass="<3", + realization_deviation="<3", + implied_relief="<3", ), ) assert _passed(thin_flags) @@ -3286,10 +3286,10 @@ def test_apprentice_gate_flags_its_small_cells_without_failing() -> None: thin_population = _gate( gate_id, _apprentice_receipt( - population_support="<10", - population_mass="<10", - target="<10", - realization_deviation="<10", + population_support="<3", + population_mass="<3", + target="<3", + realization_deviation="<3", ), ) assert _passed(thin_population) @@ -3305,7 +3305,7 @@ def test_apprentice_gate_flags_its_small_cells_without_failing() -> None: # What the receipt still prints is checked beside a withheld figure. off_rate = _gate( gate_id, - _apprentice_receipt(eligible_support="<10", eligible_mass="<10", rate=0.05992), + _apprentice_receipt(eligible_support="<3", eligible_mass="<3", rate=0.05992), ) assert not off_rate.passed assert any("not the contract's" in failure for failure in off_rate.failures) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py index 2a64d30704..ae70f0eaa0 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py @@ -342,8 +342,8 @@ def test_stage_receipt_measures_drawn_flags_and_withholds_thin_populations() -> # Two children in two households: below the disclosure floor, so neither # the share nor the age-weighted target is given, and the gate fails. assert usage["under_two_usage"] is True - assert usage["weighted_share"] == "<10" - assert usage["target"] == "<10" + assert usage["weighted_share"] == "<3" + assert usage["target"] == "<3" result = _stage_gate("frs_take_up", receipt) assert result.passed is False assert any("max_free_entitlement_hours_used" in f for f in result.failures) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_take_up.py index ba9ed57c27..047be48319 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_take_up.py @@ -243,7 +243,8 @@ def test_clipped_pools_are_flagged_unreachable() -> None: reporter=reporter, previous=np.asarray([False, False, False, True, False, False, False, False]), targets=_targets(SINGLE_0=2.0, SINGLE_2=10.0), - source_ids=np.arange(8), + # Band 0's four units copy two source households. + source_ids=np.asarray([0, 0, 1, 1, 4, 5, 6, 7]), minimum_pool_sources=1, ) assert would_claim.tolist() == [True, True, True, False, True, True, True, True] @@ -252,10 +253,11 @@ def test_clipped_pools_are_flagged_unreachable() -> None: for pool in receipt["pools"] if pool["family_type"] == "SINGLE" } - assert flags[(UC_AWARD_BAND_LABELS[0],)] == "<10" + # A pool on fewer than three sources withholds its flag. + assert flags[(UC_AWARD_BAND_LABELS[0],)] == "<3" pools = receipt["pools"] assert all("rate" not in pool for pool in pools) - # With ten or more sources behind a pool the flag says which side it is on. + # With three or more sources behind a pool the flag says which side it is on. many = np.asarray([100.0] * 12 + [3_000.0] * 12) _, receipt = _assign( award=many, @@ -307,7 +309,7 @@ def test_undrawn_units_keep_their_flag_and_count_at_their_expected_claim() -> No assert single["caseload_before"] == pytest.approx(9.0) assert single["caseload_after"] == pytest.approx(5.0) assert receipt["changed_outside_draw"] == 0 - assert receipt["moved_units"] == "<10" + assert receipt["moved_units"] == "<3" def test_rates_are_solved_over_great_britain_and_drawn_in_northern_ireland() -> None: @@ -373,7 +375,8 @@ def test_the_receipt_bands_counts_and_carries_no_rate() -> None: weights=np.full(40, 3.0), targets=_targets(SINGLE_1=60.0), ) - # Counts of records are banded or rounded, never exact (UKDS CD137 cl. 8). + # Counts of records are banded or rounded, and one or two are withheld + # (UKDS CD137 cl. 8). assert receipt["drawn_units"] == 40 assert receipt["drawn_units_northern_ireland"] == 0 pool = next( @@ -391,9 +394,9 @@ def test_the_receipt_bands_counts_and_carries_no_rate() -> None: "drawn_support", "target_unreachable", } - _, small = _assign(award=np.full(5, 1_500.0), targets=_targets(SINGLE_1=2.0)) - assert small["drawn_units"] == "<10" - assert small["families"]["SINGLE"]["caseload_after"] == "<10" + _, small = _assign(award=np.full(2, 1_500.0), targets=_targets(SINGLE_1=2.0)) + assert small["drawn_units"] == "<3" + assert small["families"]["SINGLE"]["caseload_after"] == "<3" def test_inputs_must_align_and_name_known_cells() -> None: @@ -630,22 +633,32 @@ def test_the_receipt_counts_working_age_housing_benefit_kept_and_drawn() -> None moved[16:20] = True uc_after = np.zeros(count, dtype=bool) uc_after[:6] = True - receipt = working_age_housing_benefit_receipt( - person=person, - benunit=benunit, - population=np.ones(count, dtype=bool), - moved=moved, - uc_before=np.zeros(count, dtype=bool), - uc_after=uc_after, - weights=np.ones(count), - great_britain=np.ones(count, dtype=bool), - source_ids=np.arange(count), - ) + + def receipt_for(uc_after: np.ndarray) -> dict: + return working_age_housing_benefit_receipt( + person=person, + benunit=benunit, + population=np.ones(count, dtype=bool), + moved=moved, + uc_before=np.zeros(count, dtype=bool), + uc_after=uc_after, + weights=np.ones(count), + great_britain=np.ones(count, dtype=bool), + source_ids=np.arange(count), + ) + + receipt = receipt_for(uc_after) assert receipt["reporting_units"] == pytest.approx(16.0) assert receipt["keeping_housing_benefit_before"] == pytest.approx(16.0) assert receipt["keeping_housing_benefit_after"] == pytest.approx(10.0) - # Six drawn units rest on fewer than ten sources: no weighted figure. - assert receipt["drawn_onto_universal_credit"] == "<10" + # Six drawn units rest on six sources: their weight is given. + assert receipt["drawn_onto_universal_credit"] == pytest.approx(6.0) + # Two drawn units rest on fewer than three sources: no weighted figure. + two = np.zeros(count, dtype=bool) + two[:2] = True + receipt = receipt_for(two) + assert receipt["keeping_housing_benefit_after"] == pytest.approx(14.0) + assert receipt["drawn_onto_universal_credit"] == "<3" def test_a_unit_keeping_a_legacy_benefit_is_not_drawn_onto_uc() -> None: @@ -702,7 +715,7 @@ def test_a_unit_keeping_income_related_esa_claims_no_universal_credit( assert kept["scope"] == "great_britain" assert kept["column"] == "esa_income_reported" # One source household carries it: a band, never a count or a weight. - assert kept["kept_off_support"] == ("<10" if claimant_or_partner else 0) + assert kept["kept_off_support"] == ("<3" if claimant_or_partner else 0) assert kept["units_kept_off_universal_credit"] == ( - "<10" if claimant_or_partner else 0.0 + "<3" if claimant_or_partner else 0.0 ) diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 9c92297a1b..add1f4e8c8 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -454,10 +454,10 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "b02785c2052f52bd620d0fc731470bf77528e91360faf53bce489cc697dd2472" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "8bca7f6593404f4aea80d2b3599385af61dd805b2eecf217ad977c907174732e" + "84f304421b51fdc0a2a44e1f3e541fb8e6575b97332735e46ecba917e8f07ae4" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f172457fb8b071da8c2ca5cd846fc5e17032780ed0ca0c8cfdea343bfe88867a" + "d80b60d2a74f4a0b7ad072f22314f87a9f7c75a673957fd1b56d72dc4d5c6ddd" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -964,7 +964,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "67116c007acc76d7aa95f0ab808bea32f749c7fbf167164c97c65e3b05dabe40" + "93fe9eb37992d2bd401653bd2b3cbb5f51af130d638a4e2624c0d11ffdff0c53" ), "policy_sha256": ( "c5e2159ed6f5db35b9efee701e7989b277d3120fd53e0ec084b5bd3a3c6a6340" diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index 25ba02abd1..af8d2dd4bd 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -216,10 +216,10 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "b02785c2052f52bd620d0fc731470bf77528e91360faf53bce489cc697dd2472" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "8bca7f6593404f4aea80d2b3599385af61dd805b2eecf217ad977c907174732e" + "84f304421b51fdc0a2a44e1f3e541fb8e6575b97332735e46ecba917e8f07ae4" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f172457fb8b071da8c2ca5cd846fc5e17032780ed0ca0c8cfdea343bfe88867a" + "d80b60d2a74f4a0b7ad072f22314f87a9f7c75a673957fd1b56d72dc4d5c6ddd" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json index dcd42310ac..99f903f7a3 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json @@ -98,7 +98,7 @@ "artifacts": [], "grain": "person", "nonnegative_outputs": [], - "notes": "Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source's draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from \u00a3151 to \u00a3196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer's Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame's own values, gives each person's is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year's parameters at 30 April, so the limit is 2024-25's \u00a3151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (Mar\u00eda's decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine's gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract's carers_allowance_newly_entitled rate (0.6, Mar\u00eda's ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person's identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (Mar\u00eda's ruling of 2026-10-23): there the flag is Carer Support Payment's, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year's limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where ten or more carry it and a share only where neither of its sides rests on one to nine; the stage has no health gate.", + "notes": "Runs after the SPI income chain, UC capital coherence and the Pension Credit and Child Benefit redraws, before CGT cloning, so every clone carries its source's draw (microcosm#1319). frs_spine sets would_claim_carers_allowance from reported receipt and the SPI income chain re-derives it from the refilled receipt on the rows it redraws, so that care_hours qualifies a carer for the Universal Credit carer element without paying the allowance to every carer (#882). A carer above the earnings limit cannot report the allowance, so no reform that widens it reached a carer who would claim once entitled: the April 2025 rise of the limit from \u00a3151 to \u00a3196 a week brought an estimated 61,000 more people into eligibility (Independent Review of Carer's Allowance Overpayments, July 2025, chapter 7). One temporary engine materialization at the survey year, on the frame's own values, gives each person's is_gainfully_employed_for_carers_allowance and is_severely_disabled_for_carers_allowance (consumed only); the engine reads a year's parameters at 30 April, so the limit is 2024-25's \u00a3151. The allowance is paid only for caring for a severely disabled person (SSCBA 1992 s. 70(2)), which the care hours do not record (microcosm#1418): a carer whose largest in-household band alone reaches the hours (frs_care_hours_in_household) qualifies when another member of the household is severely disabled, and a carer whose largest in-household band does not reach them (care outside the household, or hours spread over bands; the allowance needs the hours for one person) joins on a second identity-keyed uniform (salt carers_allowance_outside_household_pool) below the household-weighted share of the in-household carers reporting no allowance who have such a member (Mar\u00eda's decision (a) of 2026-10-28). A person in that pool whose care_hours reach the engine's gov.dwp.carers_allowance.min_hours (35), who reports no allowance and whom the earnings test holds gainfully employed claims at the take-up contract's carers_allowance_newly_entitled rate (0.6, Mar\u00eda's ruling of 2026-10-20, sensitivity 0.45 to 0.75) on the person's identity-keyed uniform (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). A reporter stays true; a carer under the limit who reports no allowance stays false, as the survey records them entitled and not claiming. Scotland is drawn too (Mar\u00eda's ruling of 2026-10-23): there the flag is Carer Support Payment's, which policyengine-uk pays only under its own earnings limit from 2.146.1 (PolicyEngine/policyengine-uk#2473), and the receipt reports Scotland apart. The earnings test is read before salary_sacrifice moves some contributors' pension amounts out of their pay, so a drawn carer whom that conversion takes under the survey year's limit keeps the flag although the file then shows them entitled and not reporting. The stage rebuilds the flag from reported receipt and refuses a frame whose flag no longer follows it. Its receipt bands support on distinct source households (household_source_id), and gives a weighted total only where three or more carry it and a share only where neither of its sides rests on one or two; the stage has no health gate.", "operations": [ { "consumed_only": true, @@ -1198,7 +1198,7 @@ "private_pension_income_annual_share", "contributory_benefits_annual_share" ], - "notes": "Describes each FRS adult's 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today's employee pay and annual pay from other spells (chiefly a recent leaver's last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk's months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver's pay is the last job's usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor's weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar's self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source's support as a band of distinct households, ratios only where ten or more households carry them, and the exact zeros its stage gate reads.", + "notes": "Describes each FRS adult's 12 months before the interview beside the current income columns, which it never changes, so the HMRC income-band measures can read annual income while poverty, benefits and the published engine tax keep current income. HMRC counts income received over a tax year: a person who started, left or changed a job, or had a gap, sits in another HMRC band than current pay puts them in, or in none. Outputs: the share of the year paid at today's employee pay and annual pay from other spells (chiefly a recent leaver's last job), the same pair for self-employment, and the shares of the year a private pension started on retiring and contributory JSA, ESA and Incapacity Benefit started on leaving work were in payment; an annual amount is the current amount times its share plus the other spells. The State Pension needs none: policyengine-uk's months_since_state_pension_age gives its share. Months come from CURRJOBM and JOB.WRKPREV for people in work (a person in work is never a leaver), the SAMESIT/SDEMP calendar only where it records a change, and LSTYR, LSTWRK1/2 or RETIRE1 for people out of work who worked in the last 12 months (NUMJOB2 and their last-job JOB rows); a leaving date 12 months or more before the interview gives none. A leaver's pay is the last job's usual gross pay (JOB.UGROSS, asked of people out of work who last worked in the previous 12 months, in respect of that job), scaled to the DV concept by the weighted job-level UGRSPAY/UGROSS ratio on current employees who report both and uprated by the pinned OBR average earnings index for the months since leaving; otherwise a donor's weekly pay, drawn by GROSS4 weight from current employees in their first 24 months in the job within age band x sex x full- or part-time cells (sex dropped below 30 donors), on an identity-keyed uniform (seed 0, salt employment_income_other_spells). Self-employment keeps the whole year where SEJBLONG is one or more, (SEJBMTHS + 1)/12 under a year and at most the calendar's self-employed months where self-employment is the activity today (the calendar records the main activity only, so a side business beside a job keeps its whole year); a ceased self-employed last job pays SEINCAMT (else PROFIT1, a loss as zero) for its SELWKS weeks; SEINCAM2 is already uprated to the interview by the FRS, so it is not uprated again. The receipt gives each source's support as a band of distinct households, ratios only where three or more households carry them, and the exact zeros its stage gate reads.", "operations": [ { "delimiter": "\t", @@ -5235,7 +5235,7 @@ "local_bus_trips", "household_local_bus_trips" ], - "notes": "Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, Mar\u00eda's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's \u00a32 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the \u00a33 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the \u00a33 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 10 unweighted boardings or 10 distinct households, or whose complement does, reads <10. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed.", + "notes": "Imputes local-bus travel per person from the National Travel Survey microdata (microcosm#930; the structural fix Maria ruled on 2026-09-15 for the rake-then-bind bus fares of microcosm#890). The donor is the NTS End User Licence extract (England residents only since 2013) pooled over the declared survey years for the conditional fit; the artifact pins are the 19th-edition (November 2025) tabs, verified at runtime, and the H2 fixture drives the stage with synthetic tabs in the same codebook. One QRF target, the interview frequency-of-use band (the variable behind NTS0313; 0 is the non-user band), conditioned on age band, sex, cars (the was_wealth draw on the recipient), household size, the three-band gross household income (on the recipient its HBAI net income with the deductions policyengine-uk takes to reach it added back, gross cash income as the NTS band measures it; the engine's household_gross_income adds capital gains and imputed NHS, education and transport spending, which put a fifth of households a band too high; microcosm#1164) and region, drawn from identity-keyed uniforms and rounded to the nearest band; devolved recipients take a declared proxy region for prediction only. Each person's annual local-bus trips are the diary's weighted mean for their band and residence group (London or the rest of England), split into the bus-in-London and other-local-bus series by main mode, W5 x JJXSC over W2 persons annualised by 52.14 weeks; a seven-day diary annualised per person would be right in aggregate and wrong in distribution, so it supplies band means, not per-person counts. If the extract carries no frequency column the band is drawn from the vendored NTS0313/NTS0621 shares and declared band midpoints are scaled to the vendored NTS0303 rate (the receipt names the path). Concessionary eligibility is the declared statutory age rule of the person's area, emitted for the lcfs pricing step to zero-price eligible persons' trips; the donor's eligible share of trips per series is receipted beside the publisher's concessionary boarding share. The stage and ticket tables class every diary bus boarding by how it was paid for (at the point of use, a season ticket or pass, a concessionary pass, free) and give each person the share of fare-paying boardings paid at the point of use for their band and residence group (local_bus_single_fare_share), the boardings a per-journey fare cap binds on, with the fare paid per boarding by residence group and survey year receipted beside it (microcosm#930 C13, Mar\u00eda's ask of 2026-09-23). The share is read on the cap years declared in fare_cap_regime only (England's \u00a32 single-fare cap outside London ran from 1 January 2023 to 31 December 2024, and an NTS survey year is a calendar year), because nine months of the FRS 2024-25 base year (April to December 2024) sit under that cap and the last three under the \u00a33 cap that followed it; 2022, before it, stays in the band and trip fit. The share under the \u00a33 cap or with no cap is not observed, because the extract ends in 2024 (microcosm#1331). For England outside London the receipt also carries fare-mix lines, aggregates only. Before the cap they give the share of point-of-use boardings paid above the cap and their mean fare, at that year's prices; under it, the share paid at the cap, within the declared tolerance. A line that rests on fewer than 3 unweighted boardings or 3 distinct households, or whose complement does, reads <3. The stage records the frame's band shares against NTS0313/NTS0621, its trips per person against NTS0303 and by age band against NTS0601, and the frame's car availability against NTS0205, all from vendored rows; nothing derived from the licensed rows is committed.", "operations": [ { "age_band_edges": [ @@ -6886,7 +6886,7 @@ ], "grain": "benunit", "nonnegative_outputs": [], - "notes": "Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract's one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine's design weights that put the caseload above DWP's for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP's caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release's calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit's identity and region), so after the benefit cap and deductions, the award the registry's dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration's family type reads; all are consumed only. A unit with an award falls into a cell of DWP's family type by DWP's GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up's age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP's count for the pool's bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up's rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain's at the stage's household weights, which DWP's counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit's weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland's drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP's count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool's DWP count, its support in bands of distinct source households and its unreachable flag (only where ten or more sources carry the pool), and each family type's weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant's or partner's income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869).", + "notes": "Runs after uc_capital_coherence, the last writer of universal_credit_reported and of the capital the engine assesses, and before uc_legacy_closure_take_up, which reads would_claim_uc. frs_take_up draws would_claim_uc early for FRS benefit units and spi_benefit_coherence redraws the SPI-channel units on the same rule: a reporter claims and the rest of the take-up contract's one rate times the age population is drawn uniformly over its non-reporting units, whatever their award. At the spine's design weights that put the caseload above DWP's for single people without children, couples and the smallest awards, and below it for lone parents, so the national solve met DWP's caseloads by reweighting low-income families. This stage redraws the flag for both channels. One temporary engine materialization, at the release's calibration year on the frame stamped with its survey year (as pension_credit_take_up reads Pension Credit), gives each benefit unit the award it would be paid if it claimed: universal_credit on a temporary copy where every unit claims and carries the deduction attributes uc_deduction_attributes will assign it (they read only the unit's identity and region), so after the benefit cap and deductions, the award the registry's dwp/uc_payment_dist rows band. It also gives whether the engine moves the unit off its legacy benefits that year (legacy_benefits_closed) and the UC child status the calibration's family type reads; all are consumed only. A unit with an award falls into a cell of DWP's family type by DWP's GBP 100 monthly award band, banded as the registry rows band an award, with one more band above GBP 2,500 a month. Within a family type, adjacent bands pool, lowest first, until the drawn units rest on at least 30 distinct source households. In each pool a reporter claims, and each drawn unit (entitled, non-reporting, in frs_take_up's age population and not moved off its legacy benefits) claims at r = (T - F) / D clipped to [0, 1]: T is DWP's count for the pool's bands, the mean of the April to December 2025 Stat-Xplore months (the facts the registry rows average, vendored as dwp_uc_award_band_facts.json), D the weight of the drawn units, and F the expected claims of the other entitled units: 1 for a reporter, the claim probability uc_legacy_closure_take_up's rule gives a moved unit (whose flag this stage leaves alone, so that probability does not move), and the stored flag for any other. T, F and D are Great Britain's at the stage's household weights, which DWP's counts cover. The drawn units claim in the order of their uniform until their weight is nearest T - F, so each pool realizes r to within one unit's weight rather than only in expectation, which a pool resting on a few dozen households can miss by several per cent, and Northern Ireland's drawn units claim below the same uniform. A pool whose other claims reach T, or whose T exceeds every entitled unit, cannot meet DWP's count; the receipt flags it. A unit with no award, or outside the age population, keeps its stored flag, the single-rate draw, which is how a unit claims once a reform or a later year entitles it. The uniform is the would_claim_uc identity stream frs_take_up and spi_benefit_coherence use. The receipt gives each pool's DWP count, its support in bands of distinct source households and its unreachable flag (only where three or more sources carry the pool), and each family type's weighted caseload before and after; it gives no unit count except in bands and no rate. The uk_stage_uc_take_up gate reads it; the terminal take-up signal gate no longer measures would_claim_uc. From policyengine-uk 2.149.0 a claim for Universal Credit ends a claimant's or partner's income-related ESA (pe-uk#2563), so a unit whose claimant or partner reports that award, and that neither reports Universal Credit nor is moved off its legacy benefits, claims none (kept_legacy_award): it was on the award at the interview, and a reported receipt is a fact (microcosm#1095). The closure draw downstream reads the flag this stage writes, so the closure probabilities the solve expects use it too, and the receipt bands the units it keeps off Universal Credit (income_related_esa_kept). Housing Benefit, which the engine also ends on a claim, keeps the stored flag here, pending the Housing Benefit and JSA PR (microcosm#867, microcosm#869).", "operations": [ { "artifact_role": "uc_award_band_facts", diff --git a/tools/measure_uk_spi_half_coherence.py b/tools/measure_uk_spi_half_coherence.py index fb2ee9ddde..6b76472121 100644 --- a/tools/measure_uk_spi_half_coherence.py +++ b/tools/measure_uk_spi_half_coherence.py @@ -34,6 +34,9 @@ import pandas as pd from scipy.stats import spearmanr +# Not the disclosure floor (receipt_counts.UK_DISCLOSURE_FLOOR): the cell +# floor of the correlations, medians and weighted quantiles here, since a +# median or quantile of a few records is one record's own value. MIN_CELL = 10 INCOME_COLUMNS = ( "employment_income", diff --git a/tools/report_uk_childcare_realised_take_up.py b/tools/report_uk_childcare_realised_take_up.py index e32f40224d..9b8157dd4c 100644 --- a/tools/report_uk_childcare_realised_take_up.py +++ b/tools/report_uk_childcare_realised_take_up.py @@ -17,7 +17,7 @@ and each DfE age's under-2 usage share over the children of that age in units that claim the working-parent hours. Every cell names its carriers as distinct source -households and reads "<10" in place of its shares when fewer than 10 carry it +households and reads "<3" in place of its shares when fewer than 3 carry it (UKDS disclosure control). The receipt belongs in the run tree; it is never written into the take-up contract, a hashed build input. @@ -45,12 +45,13 @@ under_two_children, universal_childcare_marginal_rate, ) +from microcosm.build.uk_runtime.receipt_counts import UK_DISCLOSURE_FLOOR, UK_WITHHELD from microcosm.build.uk_runtime.take_up_contract import ( UKTakeUpContract, load_uk_take_up_contract, ) -MINIMUM_CARRIERS = 10 +MINIMUM_CARRIERS = UK_DISCLOSURE_FLOOR HIGH_PAY_THRESHOLD = 100_000.0 YOUNG_CHILD_AGE = 5 _PAY_COLUMNS = ("employment_income", "self_employment_income") @@ -70,7 +71,7 @@ def _cell( ) -> Mapping[str, object]: carriers = int(np.unique(sources[mask]).size) if carriers < MINIMUM_CARRIERS: - return {"source_households": "<10"} + return {"source_households": UK_WITHHELD} chosen = np.asarray(values, dtype=float)[mask] return { "source_households": carriers, diff --git a/tools/report_uk_single_year_ages.py b/tools/report_uk_single_year_ages.py index a0889bbe87..0cb3f4c166 100644 --- a/tools/report_uk_single_year_ages.py +++ b/tools/report_uk_single_year_ages.py @@ -6,8 +6,8 @@ with their ratio, and the tail bands 80 to 84, 85 to 89, 90 and over and 80 and over. It reads a built H5's frame tables and final household weights (no engine). Report-only: the estimates bind nothing. Every cell names its -carriers as distinct source households and reads "<10" in place of its -figures when fewer than 10 carry it; when any single year of a sex is +carriers as distinct source households and reads "<3" in place of its +figures when fewer than 3 carry it; when any single year of a sex is withheld, every cell of that sex is (UKDS disclosure control). The receipt belongs in the run tree. diff --git a/tools/uk_private_rent_receipt.py b/tools/uk_private_rent_receipt.py index a1a673f451..05e24b220d 100644 --- a/tools/uk_private_rent_receipt.py +++ b/tools/uk_private_rent_receipt.py @@ -10,7 +10,7 @@ ``ons.rent.private_rent_brma`` (Scottish BRMA) rows at the problem's design weights, the dense solution and the size refit: how many are within 10% of their target, how many are more than 25% out, and the median error. A row - enters a summary only when ten distinct source households of positive + enters a summary only when three distinct source households of positive weight carry it at that weighting, as the build's BRMA rule counts them; the others are counted, never summarised, and a group is summarised only over ten or more published rows. A weighting whose households have no @@ -40,13 +40,13 @@ and BRMA-level model figures, for review on this machine only; - ``private_rent_summary.json`` keeps only aggregates that pass UKDS disclosure control (End User Licence CD137 clause 8, CD171 section 5.2.1). - Every model cell is carried by at least ten distinct source households, or - reads "<10" with a complementary cell in its region withheld too; a cell + Every model cell is carried by at least three distinct source households, or + reads "<3" with a complementary cell in its region withheld too; a cell of spine values counts its FRS-channel households only, since an SPI-channel row's spine rent is drawn from FRS donors. A district or BRMA group is summarised only over at least ten cells, the top 1%'s weight - share only over at least ten rows and households, and an unweighted share - only where both sides rest on at least ten households. Record counts are + share only over at least three rows and households, and an unweighted share + only where both sides rest on at least three households. Record counts are rounded (``receipt_counts.rounded_count``), no figure describes a single district or BRMA, and no unit-record value appears. Only this file's figures may be quoted in a PR or a committed receipt. @@ -91,6 +91,8 @@ rent_categories, ) from microcosm.build.uk_runtime.receipt_counts import ( + UK_DISCLOSURE_FLOOR, + UK_WITHHELD, distinct_carriers, outside_work_trees, rounded_count, @@ -98,8 +100,9 @@ SUMMARY_SCHEMA_VERSION = 1 -#: A model cell needs this many distinct source households to be reported. -MIN_SOURCE_HOUSEHOLDS = 10 +#: A model cell needs this many distinct source households to be reported: +#: the build's disclosure floor (``receipt_counts.UK_DISCLOSURE_FLOOR``). +MIN_SOURCE_HOUSEHOLDS = UK_DISCLOSURE_FLOOR #: A district or BRMA group's statistics need this many cells, so that no #: summary describes one district (a one-cell median ratio times PIPR's #: published mean gives the model's district mean back). @@ -163,8 +166,8 @@ def floored_share(numerator: int, denominator: int) -> float | str | None: """An unweighted share of records, floored to two decimals. - An exact unweighted share gives back its count; a share of one to nine - records, or one that leaves out one to nine, reads "<10" + An exact unweighted share gives back its count; a share of one or two + records, or one that leaves out one or two, reads "<3" (``receipt_counts``). """ @@ -172,7 +175,7 @@ def floored_share(numerator: int, denominator: int) -> float | str | None: return None for count in (numerator, denominator - numerator): if 0 < count < MIN_SOURCE_HOUSEHOLDS: - return "<10" + return UK_WITHHELD return math.floor(100 * numerator / denominator) / 100 @@ -207,7 +210,7 @@ def with_carriers(frame: pd.DataFrame, *, frs_only: bool = False) -> pd.DataFram def weighted_share( mask: np.ndarray, weight: np.ndarray, carrier: np.ndarray ) -> float | str | None: - """A weighted share, or "<10" where fewer than ten source households carry it. + """A weighted share, or "<3" where fewer than three source households carry it. The complement is checked too: a share just short of one would otherwise describe the few households outside it. A side holding rows counts even @@ -219,23 +222,23 @@ def weighted_share( return None for side in (mask, ~mask): if side.any() and _carriers(carrier[side]) < MIN_SOURCE_HOUSEHOLDS: - return "<10" + return UK_WITHHELD return round(float(weight[mask].sum()) / total, 4) def unweighted_share(mask: np.ndarray, carrier: np.ndarray) -> float | str | None: - """A floored share of rows whose two sides each rest on ten households. + """A floored share of rows whose two sides each rest on three households. Clone rows are not households: 8 households with 25 clones each are 200 - rows but 8 carriers, so either side resting on one to nine distinct - source households reads "<10". + rows but 8 carriers, so either side resting on one or two distinct + source households reads "<3". """ mask = np.asarray(mask, dtype=bool) carrier = np.asarray(carrier, dtype=object) for side in (mask, ~mask): if side.any() and _carriers(carrier[side]) < MIN_SOURCE_HOUSEHOLDS: - return "<10" + return UK_WITHHELD return floored_share(int(mask.sum()), int(mask.size)) @@ -244,11 +247,11 @@ def suppress_cells( ) -> dict[str, dict[str, Any]]: """Withhold cells under the threshold, and complements beside them. - A cell carried by fewer than ten distinct source households, none - included, reads "<10". Where a parent's figure is also reported, the + A cell carried by fewer than three distinct source households, none + included, reads "<3". Where a parent's figure is also reported, the withheld cells could be recovered together by difference, so the smallest reportable cells under the same parent are withheld too until - the withheld cells together rest on ten households. The cells partition + the withheld cells together rest on three households. The cells partition their parent's households, so their carriers add. """ @@ -260,7 +263,7 @@ def suppress_cells( ] hidden = sum(int(out[name][carriers_key]) for name in small) for name in small: - out[name] = {"withheld": "<10"} + out[name] = {"withheld": UK_WITHHELD} rest = sorted( (int(cell[carriers_key]), name) for name, cell in out.items() @@ -702,13 +705,13 @@ def pipr_comparison( if model.size < MIN_GROUP_CELLS: summary[label] = { "withheld": f"fewer than {MIN_GROUP_CELLS} cells", - "cells_under_10_source_households": withheld.get(label, 0), + "cells_under_floor_source_households": withheld.get(label, 0), } continue ratio = model / published summary[label] = { "cells": int(model.size), - "cells_under_10_source_households": withheld.get(label, 0), + "cells_under_floor_source_households": withheld.get(label, 0), "rank_correlation": _spearman(model, published), "share_within_10pct": round(float(np.mean(np.abs(ratio - 1) <= 0.10)), 3), "share_within_25pct": round(float(np.mean(np.abs(ratio - 1) <= 0.25)), 3), @@ -778,14 +781,15 @@ def weight_concentration(renters: pd.DataFrame) -> dict[str, Any]: if total <= 0: return {} if _carriers(renters["carrier"]) < MIN_SOURCE_HOUSEHOLDS: - return {"withheld": "<10"} + return {"withheld": UK_WITHHELD} top = max(1, math.ceil(0.01 * weight.size)) top_carriers = _carriers(renters["carrier"].to_numpy(dtype=object)[order][:top]) - # The slice must span ten rows and ten households, or it describes a few. + # The slice must span three rows and three households, or it describes one + # or two. share = ( round(float(weight[:top].sum()) / total, 4) if top >= MIN_SOURCE_HOUSEHOLDS and top_carriers >= MIN_SOURCE_HOUSEHOLDS - else "<10" + else UK_WITHHELD ) return { "renter_rows": rounded_count(int(weight.size)), @@ -959,7 +963,7 @@ def matched_change(frame: pd.DataFrame) -> dict[str, Any]: renters = with_carriers(gb.loc[redrawn], frs_only=True) for region, rows in renters.groupby("region", sort=True): if _carriers(rows["carrier"]) < MIN_SOURCE_HOUSEHOLDS: - out["region_level_at_design_weights"][region] = "<10" + out["region_level_at_design_weights"][region] = UK_WITHHELD continue w = rows["weight"].to_numpy(dtype=float) after = float((w * rows["rent"].to_numpy(dtype=float)).sum()) From c5d40e4c8a40d0448c6a6a831ecc0284fee6f7c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 30 Oct 2026 16:09:02 +0000 Subject: [PATCH 23/39] Lock policyengine-uk 2.165.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The UK lock moves from 2.164.2, which #1421 brought, to 2.165.1, the newest release (microcosm#1095, Phase C's first re-bump): - 2.164.3 (policyengine-uk#2736) counts other investment income in market income and in HBAI household net income, before and after the reset to zero. The LCFS, NEED and NTS stages band recipients on that HBAI income with its deductions added back, so their gross income now counts it, as the surveys' gross incomes do. - 2.164.4 (policyengine-uk#2746) counts it in capital_income too. Its changelog says nothing reads capital_income; the WAS stage does, as a predictor, and the recipients' figure now matches the donor's DVGIINVR8, WAS's gross income from all financial investments. - 2.165.0 (policyengine-uk#2750) adds the company car and car fuel benefits in kind and the Class 1A NICs on them, read from nine person inputs. The build writes none, so no one has a company car and both benefits are zero, as before. The inputs are signed at their default in UK_ENGINE_DEFAULT_INPUTS for María's signature; the company car PR for the Autumn Budget dashboard's #316 supplies six of them. - 2.165.1 (policyengine-uk#2754) lets a family that would claim UC keep Tax-Free Childcare instead when the top-up is worth more than the award (forgoes_universal_credit_for_tax_free_childcare), and takes no debt deductions from an award only a reform creates. Every new variable is a formula. Two lockstep tests follow the engine: Tax-Free Childcare's top-up is one helper from 2.165.1, which reads the spend the build routes; and the person-level GBP stocks gain the company car's list price and the capital contributions towards it, which are no one's capital. No economic assumption moves: the vendored uprating pins and the bonus-sacrifice anchor change only their version stamps, and no gate digest moves. The three pyproject floors, uv.lock (policyengine-uk alone), the approved lock digest, the engine-core pin test, the concept coverage report, the version mentions in code, notes and tests, source_stages.json, the coverage manifest and the charter-H2 fixture follow. Co-Authored-By: Claude Opus 5.5 --- .../uk-policyengine-uk-2-165-1.changed.md | 1 + docs/concept-coverage/policyengine-uk.md | 10 ++-- docs/uk-isa-subscriptions-1415.md | 4 +- docs/uk-lisa-1003.md | 2 +- packages/microcosm-build/pyproject.toml | 2 +- .../build/uk/bonus_sacrifice_anchor.json | 2 +- .../build/uk/hmrc_uprating_engine_pins.json | 2 +- .../uk/release_input_coverage_manifest.json | 46 +++++++++---------- .../src/microcosm/build/uk/source_stages.json | 8 ++-- .../src/microcosm/build/uk/spec/sources.yaml | 8 ++-- .../microcosm/build/uk_runtime/frs_take_up.py | 2 +- .../build/uk_runtime/hmrc_uprating.py | 4 +- .../build/uk_runtime/uc_capital_coherence.py | 2 +- .../build/us_runtime/worker_identity.py | 2 +- .../engine/uk/test_uk_childcare_targets.py | 13 +++++- .../engine/uk/test_uk_dfe_spring_term.py | 2 +- .../engine/uk/test_uk_isa_income_contract.py | 2 +- .../shared/test_engine_core_pins.py | 2 +- .../engine_free/uk/test_uk_frs_stochastic.py | 2 +- packages/microcosm-data/pyproject.toml | 2 +- packages/microcosm-frame/pyproject.toml | 2 +- .../adapters/policyengine_uk_concepts.py | 25 +++++++++- .../test_concept_mapping_policyengine_uk.py | 8 +++- .../concept-coverage/policyengine-uk.json | 40 +++++++++++++++- .../parity/uk_spine/sources/fixture.json | 8 ++-- .../fixtures/parity/uk_spine/uk_spine.json | 2 +- uv.lock | 12 ++--- 27 files changed, 145 insertions(+), 70 deletions(-) create mode 100644 changelog.d/uk-policyengine-uk-2-165-1.changed.md diff --git a/changelog.d/uk-policyengine-uk-2-165-1.changed.md b/changelog.d/uk-policyengine-uk-2-165-1.changed.md new file mode 100644 index 0000000000..c39a000ec4 --- /dev/null +++ b/changelog.d/uk-policyengine-uk-2-165-1.changed.md @@ -0,0 +1 @@ +The UK lock moves from policyengine-uk 2.164.2 to 2.165.1 (microcosm#1095). 2.164.3 (PolicyEngine/policyengine-uk#2736) counts other investment income in market income and HBAI household net income, and 2.164.4 (PolicyEngine/policyengine-uk#2746) in `capital_income`. So the stages that band households on HBAI income with its deductions added back now count it, as the LCFS, NEED and NTS gross incomes they match do, and the WAS stage's `capital_income` predictor now matches the donor's gross income from all financial investments (`DVGIINVR8`). 2.165.0 (PolicyEngine/policyengine-uk#2750) adds the company car and car fuel benefits in kind and the Class 1A NICs on them; the build writes none of their nine person inputs, so both benefits stay zero, as before, and the inputs are signed at their default. 2.165.1 (PolicyEngine/policyengine-uk#2754) lets a family keep Tax-Free Childcare in place of a smaller Universal Credit award, and takes no debt deductions from an award only a reform creates. No economic assumption moves, so the vendored engine pins, the bonus-sacrifice anchor and the CGT projection path keep their values; only their version stamps move. diff --git a/docs/concept-coverage/policyengine-uk.md b/docs/concept-coverage/policyengine-uk.md index d02baaf1ab..ed7733fb70 100644 --- a/docs/concept-coverage/policyengine-uk.md +++ b/docs/concept-coverage/policyengine-uk.md @@ -1,11 +1,11 @@ # Concept coverage: policyengine-uk -Engine version `2.164.2`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand. +Engine version `2.165.1`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand. -- Engine inputs: 360 +- Engine inputs: 369 - Fed by a concept: 41 - Structural: 11 -- Uncovered: 308 +- Uncovered: 317 - Mapped but missing from the engine: 0 ## Inputs each concept feeds @@ -58,6 +58,6 @@ Engine version `2.164.2`; concept schema `5a55669d0447`. Generated by `tools/ref `accommodation_type`, `additional_residential_property_purchased`, `alcohol_and_tobacco_consumption`, `beer_draught_share`, `beer_litres`, `betting_exchange_commission`, `bingo_net_receipts`, `bus_fare_spending_reported`, `bus_subsidy_spending`, `cider_draught_share`, `cider_litres`, `cigarettes_per_week`, `cigars_grams_per_week`, `clothing_and_footwear_consumption`, `communication_consumption`, `consumer_debt`, `corporate_wealth`, `council_tax_band`, `cumulative_non_residential_rent`, `cumulative_residential_rent`, `dfe_education_spending`, `diesel_spending`, `directly_held_shares`, `domestic_energy_consumption`, `domestic_rates`, `ebr_energy_bills_credit_eligible`, `education_consumption`, `electricity_consumption`, `electricity_consumption_kwh`, `external_child_payments`, `financial_spread_betting_net_losses`, `food_and_non_alcoholic_beverages_consumption`, `full_rate_vat_expenditure_rate`, `gas_consumption`, `gas_consumption_kwh`, `gross_financial_wealth`, `hand_rolling_tobacco_grams_per_week`, `health_consumption`, `heated_tobacco_grams_per_week`, `horse_and_dog_pool_betting_net_losses`, `household_furnishings_consumption`, `household_owns_tv`, `housing_service_charges`, `housing_water_and_electricity_consumption`, `in_original_frs`, `in_rural_fuel_duty_relief_area`, `is_shared_accommodation`, `land_based_casino_net_losses`, `land_based_fixed_odds_betting_net_losses`, `liquid_fuel_consumption`, `local_authority`, `lpg_kg`, `machine_games_higher_rate_net_takings`, `machine_games_lower_rate_net_takings`, `machine_games_standard_rate_net_takings`, `main_residence_value`, `main_residential_property_purchased_is_first_home`, `main_residential_property_purchased_is_in_uk`, `main_residential_property_purchased_with_mortgage`, `miscellaneous_consumption`, `mortgage_debt`, `national_lottery_ticket_spending`, `natural_gas_kg`, `net_financial_wealth`, `ni_epg_full_rate_applies`, `non_residential_property_purchased`, `non_residential_property_secured_debt`, `non_residential_property_value`, `non_residential_rent`, `num_bedrooms`, `num_vehicles`, `other_fermented_draught_share`, `other_fermented_litres`, `other_residential_property_secured_debt`, `other_residential_property_value`, `other_spread_betting_net_losses`, `other_tobacco_grams_per_week`, `owned_land`, `petrol_spending`, `pool_betting_net_receipts`, `private_pension_wealth`, `property_purchased`, `rail_usage`, `recreation_consumption`, `region`, `remote_gaming_net_losses`, `remote_other_betting_net_losses`, `remote_uk_horseracing_betting_net_losses`, `restaurants_and_hotels_consumption`, `savings`, `solid_fuel_consumption`, `sparkling_cider_draught_share`, `sparkling_cider_litres`, `spi_imputed`, `spirits_draught_share`, `spirits_litres`, `structural_insurance_payments`, `transport_consumption`, `uc_migrated`, `unit_and_investment_trusts`, `uses_energy_prepayment_meter`, `water_and_sewerage_charges`, `wine_draught_share`, `wine_litres`, `would_evade_tv_licence_fee` -### person (185) +### person (194) -`a_and_e_visits`, `aa_category`, `access_fund`, `admitted_patient_visits`, `adult_dependants_grant_has_other_adult_dependant`, `adult_dependants_grant_other_adult_income`, `adult_dependants_grant_receives_postgraduate_loan`, `adult_ema`, `afcs_reported`, `age_started_or_accepted_current_education_or_training`, `armed_forces_independence_payment`, `attends_private_school_random_draw`, `base_net_income`, `blind_persons_allowance`, `bsp_reported`, `bursary_fund_16_to_19_in_care_or_care_leaver`, `bursary_fund_16_to_19_participation_costs`, `bursary_fund_16_to_19_self_supporting`, `bus_in_london_trips`, `bus_pass_eligible`, `capital_allowances`, `capital_gains_badr`, `capital_gains_carried_interest`, `capital_gains_residential_property`, `car_co2_emissions`, `car_engine_size`, `car_first_registration_date`, `car_fuel_type`, `car_is_ved_exempt`, `car_list_price`, `care_hours`, `carers_allowance_reported`, `cash_isa_balance`, `cash_isa_subscriptions`, `charitable_investment_gifts`, `child_benefit_reported`, `child_ema`, `child_limit_adoption_exception`, `child_limit_continuation_exception`, `child_limit_multiple_birth_exception`, `child_limit_non_consensual_conception_exception`, `child_limit_non_parental_caring_exception`, `child_tax_credit_reported`, `childcare_expenses`, `childcare_grant_child_has_special_educational_needs`, `childcare_grant_provider_is_nanny`, `childcare_grant_receives_nhs_childcare_support`, `childcare_grant_receives_postgraduate_loan`, `council_tax_benefit_reported`, `covenanted_payments`, `deficiency_relief`, `defined_benefit_pension_share`, `disabled_students_allowance_eligible_expenses`, `disabled_students_allowance_receives_equivalent_support`, `dla_m_category`, `dla_sc_category`, `early_years_school_start_deferred`, `education_grants`, `employee_pension_contributions_reported`, `employer_pension_contributions`, `employment_expenses`, `employment_sector`, `employment_status`, `esa_contrib_reported`, `esa_income_reported`, `free_school_fruit_veg`, `free_school_meals`, `free_school_milk`, `gift_aid`, `healthy_start_vouchers`, `housing_benefit_reported`, `iidb_reported`, `in_FE`, `incapacity_benefit_reported`, `income_support_reported`, `individual_savings_account_dividend_income`, `is_about_to_start_paid_work`, `is_apprentice`, `is_before_universal_credit_qualifying_young_person_terminal_date`, `is_blind`, `is_engaged_in_owned_company_trade`, `is_full_year_category_a_director`, `is_in_approved_training`, `is_in_first_year_of_apprenticeship`, `is_looked_after_by_local_authority`, `is_newly_self_employed`, `jsa_contrib_reported`, `jsa_income_reported`, `lifetime_isa_balance`, `lifetime_isa_first_time_buyer`, `lifetime_isa_months_since_first_payment`, `lifetime_isa_payments`, `lifetime_isa_terminally_ill`, `lifetime_isa_withdrawals`, `lifetime_isa_withdrawals_towards_first_home`, `local_bus_uncapped_single_fare`, `loss_relief`, `lump_sum_income`, `maintenance_expenses`, `maintenance_income`, `married_couples_allowance`, `maternity_allowance_reported`, `max_free_entitlement_hours_used`, `miscellaneous_income`, `nhs_a_and_e_spending`, `nhs_admitted_patient_spending`, `nhs_outpatient_spending`, `ni_class_3`, `non_cash_isa_cash_interest`, `other_deductions`, `other_investment_income`, `other_local_bus_trips`, `other_tax_credits`, `outpatient_visits`, `owned_company_capital`, `owned_company_carries_on_property_business`, `owned_company_carries_on_trade`, `owned_company_holding_value`, `owned_company_income_share`, `owned_company_intermediary_earnings_chapter`, `owned_company_intermediary_earnings_from_main_employment`, `owned_company_is_main_employment`, `owned_company_trade_assets`, `pension_annual_allowance_taxable_lump_sum_death_benefits`, `pension_contributions_via_bonus_sacrifice`, `pension_contributions_via_salary_sacrifice`, `pension_contributions_via_salary_sacrifice_pre_2015`, `pension_credit_reported`, `pension_income`, `person_benunit_role`, `person_household_role`, `personal_pension_contributions`, `pip_dl_points`, `pip_m_points`, `private_transfer_income`, `property_finance_costs`, `property_finance_costs_brought_forward`, `property_rental_income`, `receives_benefits_in_own_right`, `receives_limited_capability_for_work_credits`, `rent_paid_as_boarder`, `rent_paid_as_lodger`, `role`, `salary_sacrifice_returned_to_income`, `scottish_funded_early_learning_childcare_start_date_reached`, `sda_reported`, `self_employment_gross_receipts`, `sic_industry_division`, `spousal_maintenance_income`, `ssmg_reported`, `stands_as_sole_owner_or_partner_of_company`, `statutory_maternity_pay`, `statutory_paternity_pay`, `statutory_sick_pay`, `stocks_and_shares_isa_balance`, `stocks_and_shares_isa_subscriptions`, `student_loan_balance`, `student_loan_plan`, `student_loans`, `sublet_income`, `tax_free_childcare_on_adoption_leave`, `tax_free_childcare_on_carers_leave`, `tax_free_childcare_on_qualifying_leave`, `tax_free_childcare_on_shared_parental_leave`, `tax_free_childcare_self_employment_start_up_period`, `tax_free_childcare_spend_routed_share`, `tax_free_childcare_uses_qualifying_provider`, `tax_reported`, `travel_grant_abroad_placement`, `travel_grant_clinical_placement`, `travel_grant_eligible_expenses`, `travel_grant_receives_means_tested_nhs_bursary`, `uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period`, `uc_is_adopter_in_first_year`, `uc_is_foster_parent_or_new_friend_or_family_carer`, `uc_is_in_pregnancy_or_post_confinement_period`, `uc_is_in_startup_period`, `uc_is_responsible_foster_parent_of_child_under_one`, `uc_is_student_with_no_work_related_requirements`, `uc_is_temporarily_absent_from_claimant_household`, `universal_credit_reported`, `war_widows_pension_reported`, `widowed_parents_allowance_reported`, `winter_fuel_allowance_reported`, `working_tax_credit_reported` +`a_and_e_visits`, `aa_category`, `access_fund`, `admitted_patient_visits`, `adult_dependants_grant_has_other_adult_dependant`, `adult_dependants_grant_other_adult_income`, `adult_dependants_grant_receives_postgraduate_loan`, `adult_ema`, `afcs_reported`, `age_started_or_accepted_current_education_or_training`, `armed_forces_independence_payment`, `attends_private_school_random_draw`, `base_net_income`, `blind_persons_allowance`, `bsp_reported`, `bursary_fund_16_to_19_in_care_or_care_leaver`, `bursary_fund_16_to_19_participation_costs`, `bursary_fund_16_to_19_self_supporting`, `bus_in_london_trips`, `bus_pass_eligible`, `capital_allowances`, `capital_gains_badr`, `capital_gains_carried_interest`, `capital_gains_residential_property`, `car_co2_emissions`, `car_engine_size`, `car_first_registration_date`, `car_fuel_type`, `car_is_ved_exempt`, `car_list_price`, `care_hours`, `carers_allowance_reported`, `cash_isa_balance`, `cash_isa_subscriptions`, `charitable_investment_gifts`, `child_benefit_reported`, `child_ema`, `child_limit_adoption_exception`, `child_limit_continuation_exception`, `child_limit_multiple_birth_exception`, `child_limit_non_consensual_conception_exception`, `child_limit_non_parental_caring_exception`, `child_tax_credit_reported`, `childcare_expenses`, `childcare_grant_child_has_special_educational_needs`, `childcare_grant_provider_is_nanny`, `childcare_grant_receives_nhs_childcare_support`, `childcare_grant_receives_postgraduate_loan`, `company_car_availability`, `company_car_capital_contributions`, `company_car_co2_emissions`, `company_car_electric_range`, `company_car_fuel_type`, `company_car_list_price`, `company_car_private_fuel_provided`, `company_car_private_use_payments`, `company_car_registered_from_6_april_2020`, `council_tax_benefit_reported`, `covenanted_payments`, `deficiency_relief`, `defined_benefit_pension_share`, `disabled_students_allowance_eligible_expenses`, `disabled_students_allowance_receives_equivalent_support`, `dla_m_category`, `dla_sc_category`, `early_years_school_start_deferred`, `education_grants`, `employee_pension_contributions_reported`, `employer_pension_contributions`, `employment_expenses`, `employment_sector`, `employment_status`, `esa_contrib_reported`, `esa_income_reported`, `free_school_fruit_veg`, `free_school_meals`, `free_school_milk`, `gift_aid`, `healthy_start_vouchers`, `housing_benefit_reported`, `iidb_reported`, `in_FE`, `incapacity_benefit_reported`, `income_support_reported`, `individual_savings_account_dividend_income`, `is_about_to_start_paid_work`, `is_apprentice`, `is_before_universal_credit_qualifying_young_person_terminal_date`, `is_blind`, `is_engaged_in_owned_company_trade`, `is_full_year_category_a_director`, `is_in_approved_training`, `is_in_first_year_of_apprenticeship`, `is_looked_after_by_local_authority`, `is_newly_self_employed`, `jsa_contrib_reported`, `jsa_income_reported`, `lifetime_isa_balance`, `lifetime_isa_first_time_buyer`, `lifetime_isa_months_since_first_payment`, `lifetime_isa_payments`, `lifetime_isa_terminally_ill`, `lifetime_isa_withdrawals`, `lifetime_isa_withdrawals_towards_first_home`, `local_bus_uncapped_single_fare`, `loss_relief`, `lump_sum_income`, `maintenance_expenses`, `maintenance_income`, `married_couples_allowance`, `maternity_allowance_reported`, `max_free_entitlement_hours_used`, `miscellaneous_income`, `nhs_a_and_e_spending`, `nhs_admitted_patient_spending`, `nhs_outpatient_spending`, `ni_class_3`, `non_cash_isa_cash_interest`, `other_deductions`, `other_investment_income`, `other_local_bus_trips`, `other_tax_credits`, `outpatient_visits`, `owned_company_capital`, `owned_company_carries_on_property_business`, `owned_company_carries_on_trade`, `owned_company_holding_value`, `owned_company_income_share`, `owned_company_intermediary_earnings_chapter`, `owned_company_intermediary_earnings_from_main_employment`, `owned_company_is_main_employment`, `owned_company_trade_assets`, `pension_annual_allowance_taxable_lump_sum_death_benefits`, `pension_contributions_via_bonus_sacrifice`, `pension_contributions_via_salary_sacrifice`, `pension_contributions_via_salary_sacrifice_pre_2015`, `pension_credit_reported`, `pension_income`, `person_benunit_role`, `person_household_role`, `personal_pension_contributions`, `pip_dl_points`, `pip_m_points`, `private_transfer_income`, `property_finance_costs`, `property_finance_costs_brought_forward`, `property_rental_income`, `receives_benefits_in_own_right`, `receives_limited_capability_for_work_credits`, `rent_paid_as_boarder`, `rent_paid_as_lodger`, `role`, `salary_sacrifice_returned_to_income`, `scottish_funded_early_learning_childcare_start_date_reached`, `sda_reported`, `self_employment_gross_receipts`, `sic_industry_division`, `spousal_maintenance_income`, `ssmg_reported`, `stands_as_sole_owner_or_partner_of_company`, `statutory_maternity_pay`, `statutory_paternity_pay`, `statutory_sick_pay`, `stocks_and_shares_isa_balance`, `stocks_and_shares_isa_subscriptions`, `student_loan_balance`, `student_loan_plan`, `student_loans`, `sublet_income`, `tax_free_childcare_on_adoption_leave`, `tax_free_childcare_on_carers_leave`, `tax_free_childcare_on_qualifying_leave`, `tax_free_childcare_on_shared_parental_leave`, `tax_free_childcare_self_employment_start_up_period`, `tax_free_childcare_spend_routed_share`, `tax_free_childcare_uses_qualifying_provider`, `tax_reported`, `travel_grant_abroad_placement`, `travel_grant_clinical_placement`, `travel_grant_eligible_expenses`, `travel_grant_receives_means_tested_nhs_bursary`, `uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period`, `uc_is_adopter_in_first_year`, `uc_is_foster_parent_or_new_friend_or_family_carer`, `uc_is_in_pregnancy_or_post_confinement_period`, `uc_is_in_startup_period`, `uc_is_responsible_foster_parent_of_child_under_one`, `uc_is_student_with_no_work_related_requirements`, `uc_is_temporarily_absent_from_claimant_household`, `universal_credit_reported`, `war_widows_pension_reported`, `widowed_parents_allowance_reported`, `winter_fuel_allowance_reported`, `working_tax_credit_reported` diff --git a/docs/uk-isa-subscriptions-1415.md b/docs/uk-isa-subscriptions-1415.md index c1e9585a61..b6422160f4 100644 --- a/docs/uk-isa-subscriptions-1415.md +++ b/docs/uk-isa-subscriptions-1415.md @@ -15,7 +15,7 @@ runs last, on final incomes, and nothing in the spine reads its outputs. The `was_lisa` stage also anchors Lifetime ISA holders to HMRC's payers (below, and [the LISA notes](uk-lisa-1003.md)). -The pinned policyengine-uk 2.164.2 reads all five: +The pinned policyengine-uk 2.165.1 reads all five: - `lifetime_isa_payments`, whose 25% bonus is `lifetime_isa_bonus`; - the subscriptions, against the limits of policyengine-uk#2712 @@ -190,7 +190,7 @@ HMRC's national totals, so it is a population fact check. The fields support the subscriptions a limit leaves out: the overall £20,000 limit and a separate cash limit (the £12,000 under-65 setting is a reform in policyengine-uk), through `isa_subscriptions_above_limit` and -`cash_isa_subscriptions_above_limit`. policyengine-uk 2.164.2 reads neither in +`cash_isa_subscriptions_above_limit`. policyengine-uk 2.165.1 reads neither in any tax or spending variable, so a limit reform changes those amounts but costs nothing until the engine models where the excess goes. The subscriptions are flows the engine does not uprate, so a later year reads 2024-25 amounts. In diff --git a/docs/uk-lisa-1003.md b/docs/uk-lisa-1003.md index c7787aa207..260d7d5311 100644 --- a/docs/uk-lisa-1003.md +++ b/docs/uk-lisa-1003.md @@ -139,7 +139,7 @@ financial wealth. LISAs are not inside `savings` (savings accounts), `cash_isa`, `stocks_and_shares_isa` or `corporate_wealth`. The LISA columns are a detail of gross financial wealth: they must never be added to it, to `savings`, or to the ISA columns. The engine's `total_wealth` does not read -`gross_financial_wealth`. On policyengine-uk 2.164.2 the means tests of +`gross_financial_wealth`. On policyengine-uk 2.165.1 the means tests of Universal Credit, Housing Benefit, Pension Credit, income-based ESA and JSA and Income Support count a LISA at its surrender value (`lifetime_isa_countable_capital`: the balance less the withdrawal charge below diff --git a/packages/microcosm-build/pyproject.toml b/packages/microcosm-build/pyproject.toml index 15360f21fc..bd3827176b 100644 --- a/packages/microcosm-build/pyproject.toml +++ b/packages/microcosm-build/pyproject.toml @@ -46,7 +46,7 @@ us = [ # The UK extra adds the rules engine for local metric generation from a # Microcosm UK H5. Target tables remain explicit inputs, and the base package # still does not import policyengine-uk at import time. -uk = ["policyengine-uk>=2.164.2", "microcosm-data>=0.1,<0.2", "h5py>=3", "tables>=3", "openpyxl>=3.1"] +uk = ["policyengine-uk>=2.165.1", "microcosm-data>=0.1,<0.2", "h5py>=3", "tables>=3", "openpyxl>=3.1"] [project.scripts] microcosm-build-uk = "microcosm.build.uk_runtime.full_build_cli:main" diff --git a/packages/microcosm-build/src/microcosm/build/uk/bonus_sacrifice_anchor.json b/packages/microcosm-build/src/microcosm/build/uk/bonus_sacrifice_anchor.json index fa4b00fdf7..51a7234c37 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/bonus_sacrifice_anchor.json +++ b/packages/microcosm-build/src/microcosm/build/uk/bonus_sacrifice_anchor.json @@ -2,7 +2,7 @@ "schema_version": 1, "engine": { "package": "policyengine-uk", - "version": "2.164.2" + "version": "2.165.1" }, "written_by": "tools/pin_uk_bonus_sacrifice_anchor.py", "source": { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_uprating_engine_pins.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_uprating_engine_pins.json index 7f0bbcc3f0..190a1f54a9 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_uprating_engine_pins.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_uprating_engine_pins.json @@ -2,7 +2,7 @@ "schema_version": 1, "engine": { "package": "policyengine-uk", - "version": "2.164.2" + "version": "2.165.1" }, "basis": "policyengine-uk parameter ratio between 1 January of the fact's opening year and 1 January of the calibration year (the SPI donor rebasing convention)", "written_by": "tools/pin_uk_uprating_engine_values.py", diff --git a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json index 2f8d0b386d..eff71f8dfd 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json @@ -472,7 +472,7 @@ "required_mass_change_reason": "Capital-gains incidence anchor moves the mass of non-liable clone households back to their paired originals until the sub-exempt and loss-making clone mass match the Advani-Summers reporter composition at the redrawn liable mass; every pair's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, the HMRC Table 3 redrawn gains on the spine and Advani-Summers capital-gains incidence" @@ -495,7 +495,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, and Advani-Summers capital-gains incidence" @@ -518,7 +518,7 @@ "required_mass_change_reason": "Capital-gains residential split divides every household carrying liable gainers into arms weighted by the solved residential probabilities, one arm per subset of residential gainers; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) on the amounts the Table 3 redraw placed" @@ -540,7 +540,7 @@ "required_mass_change_reason": "Capital-gains support split divides the wealthiest households of each HMRC Table 3 income band into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 3 for 2024-25, via the vendored conditioning facts", "survey": "Family Resources Survey 2024-25, SPI synthetic support and HMRC Capital Gains Tax statistics Table 3 (2024-25 individuals by size of gain and taxable income)" @@ -569,7 +569,7 @@ "required_mass_change_reason": "ETB public-services imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab, DfT rail fare index, and public NHS activity/cost table.", "survey": "Effects of Taxes and Benefits 1977-2024 and NHS age-gender public table" @@ -589,7 +589,7 @@ "required_mass_change_reason": "ETB VAT expenditure-rate imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource.", "survey": "Effects of Taxes and Benefits 1977-2024" @@ -611,7 +611,7 @@ "required_mass_change_reason": "High-value home support divides every owner household in the top value stratum of its region into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Microcosm structural operator (microcosm#1240 fix 1); no publisher input", "survey": "Family Resources Survey 2024-25 and SPI synthetic support, after the WAS wealth draw and the regional property uprating" @@ -632,7 +632,7 @@ "required_mass_change_reason": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative), Table 4.1 (individuals claiming Business Asset Disposal Relief or Investors' Relief by band of qualifying gain, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" @@ -656,7 +656,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", "conditioning_resource_sha256": "f7425784231e1f6aa657d0f26fc02591d9523600eb12fce5d35becf5dabf7569", @@ -746,7 +746,7 @@ "full_frs_tei_band_unavailable" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "hmrc_surface": "2023-24", "mapped_build_period": "2024", @@ -773,7 +773,7 @@ "required_mass_change_reason": "ISA subscriptions per adult from HMRC's ISA tables on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "HMRC Individual Savings Account statistics Tables 9.4, 9.6 and 9.7 to 9.9, the cash ISA limit reduction impact note and Lifetime ISA Table 1a, via the vendored facts; Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "HMRC Annual savings statistics (September 2026 release); Wealth and Assets Survey round 8" @@ -838,7 +838,7 @@ "required_mass_change_reason": "LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", "survey": "Living Costs and Food Survey 2024-25" @@ -864,7 +864,7 @@ "required_mass_change_reason": "NTS bus-travel imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Department for Transport National Travel Survey, UK Data Service SN 5340 (End User Licence, 19th edition, November 2025), DOI 10.5255/UKDA-SN-5340-19; local licensed tab files (household, individual, trip); England residents only from 2013.", "survey": "National Travel Survey 2002-2024" @@ -884,7 +884,7 @@ "required_mass_change_reason": "Private-school attendance stored on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "policyengine-uk attends_private_school (the gov.simulation.private_school_vat attendance rates and factor), evaluated by the pinned engine", "survey": "policyengine-uk private-school attendance imputation, stored at the spine's weights" @@ -907,7 +907,7 @@ "property_finance_costs" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "https://www.gov.uk/government/statistics/property-rental-income-statistics", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)" @@ -928,7 +928,7 @@ "required_mass_change_reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics", "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b" @@ -951,7 +951,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations", "survey": "HM Land Registry Price Paid latest sales uprated with the UK House Price Index, owner-weighted by region (the dense value node's knots, region level)" @@ -975,7 +975,7 @@ "non_residential_property_value" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "MHCLG dwellings and the UK House Price Index regional average price averaged over the twelve months of calendar 2024 from the July 2026 full file, the frame's valuation basis, so the engine's annual uprating from 2024 projects the value once (microcosm#1240 fix 5).", "survey": "Public regional property reference" @@ -1003,7 +1003,7 @@ "employment_income" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "HMRC, Salary sacrifice reform for pension contributions effective from 6 April 2029", "survey": "Family Resources Survey 2024-25 salary-sacrifice respondents and HMRC salary-sacrifice reform analysis" @@ -1036,7 +1036,7 @@ "household_source_id" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Reserved SPI support households for the HMRC Table 2.5 total-income bands from GBP 200,000, stacked at the published band taxpayer count over the donors per band (PolicyEngine/chronicle#280 lane).", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Income Tax liabilities statistics July 2026 Table 2.5" @@ -1058,7 +1058,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Explore Education Statistics Table 6a, Higher education total", "survey": "Family Resources Survey 2024-25 and Student Loans Company borrower forecasts for England" @@ -1080,7 +1080,7 @@ "required_mass_change_reason": "WAS Lifetime ISA imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "Wealth and Assets Survey round 8" @@ -1119,7 +1119,7 @@ "required_mass_change_reason": "WAS wealth imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "efd455f1185b93c018a4f7b7116291d7f4103d7ae596fdc1d0693f9527f29f84", + "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed 2006-22 household tab.", "survey": "Wealth and Assets Survey round 8" diff --git a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json index 59f5d7390b..59d1a657a4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -1133,7 +1133,7 @@ "maximum_extended_childcare_hours_usage", "max_free_entitlement_hours_used" ], - "notes": "Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.164.2's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30." + "notes": "Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.165.1's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30." }, { "stage": "frs_person_draws", @@ -6110,7 +6110,7 @@ "frs_benunit_capital", "would_claim_uc" ], - "notes": "Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.164.2 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (María's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base." + "notes": "Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.165.1 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (María's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base." }, { "stage": "uc_take_up", @@ -6966,7 +6966,7 @@ { "role": "policy_parameters", "kind": "versioned_parameter_tree", - "dependency": "policyengine-uk>=2.164.2 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.165.1 via microcosm-build[uk]", "parameters": [ "gov.hmrc.cgt.annual_exempt_amount" ], @@ -7047,7 +7047,7 @@ { "role": "policy_parameters", "kind": "versioned_parameter_tree", - "dependency": "policyengine-uk>=2.164.2 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.165.1 via microcosm-build[uk]", "parameters": [ "gov.hmrc.cgt.annual_exempt_amount", "gov.hmrc.cgt.badr.lifetime_limit", diff --git a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml index 2630b7d783..714ce06396 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -1033,7 +1033,7 @@ stages: nonnegative_outputs: - maximum_extended_childcare_hours_usage - max_free_entitlement_hours_used - notes: Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.164.2's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30. + notes: Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.165.1's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30. - stage: frs_person_draws survey: Family Resources Survey 2024-25 source: Sourced UK take-up contract rates and identity-keyed deterministic draws. @@ -4933,7 +4933,7 @@ stages: rewrites: - frs_benunit_capital - would_claim_uc - notes: Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.164.2 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (María's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base. + notes: Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.165.1 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (María's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base. - stage: uc_take_up survey: Family Resources Survey 2024-25 source: 'DWP Stat-Xplore, Households on Universal Credit by family type and monthly award amount band, April to December 2025, applied to PolicyEngine-UK pre-take-up Universal Credit awards after the SPI income chain and UC capital coherence.' @@ -5603,7 +5603,7 @@ stages: artifacts: - role: policy_parameters kind: versioned_parameter_tree - dependency: policyengine-uk>=2.164.2 via microcosm-build[uk] + dependency: policyengine-uk>=2.165.1 via microcosm-build[uk] parameters: - gov.hmrc.cgt.annual_exempt_amount instant_rule: raw dated parameter files evaluated at 1 June of the build period's tax year @@ -5668,7 +5668,7 @@ stages: artifacts: - role: policy_parameters kind: versioned_parameter_tree - dependency: policyengine-uk>=2.164.2 via microcosm-build[uk] + dependency: policyengine-uk>=2.165.1 via microcosm-build[uk] parameters: - gov.hmrc.cgt.annual_exempt_amount - gov.hmrc.cgt.badr.lifetime_limit diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py index 3b538c0400..ed416f8783 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_take_up.py @@ -87,7 +87,7 @@ for output in (*FRS_TAKE_UP_OUTPUT_COLUMNS, *FRS_TAKE_UP_PERSON_OUTPUT_COLUMNS) } # Universal Credit is claimable only by a benefit unit whose claimant or -# partner meets its age conditions: policyengine-uk 2.164.2's ``is_uc_eligible`` +# partner meets its age conditions: policyengine-uk 2.165.1's ``is_uc_eligible`` # (capital aside) needs a single or joint claimant, taken from # ``is_uc_claimant``, who meets UC's minimum age and has not reached Pension # Credit qualifying age. The draw's population is therefore the units with a diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_uprating.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_uprating.py index ab0dff656e..da17983b1e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_uprating.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_uprating.py @@ -533,8 +533,8 @@ def assert_installed_engine_is_pinned() -> str: jobs and the H2 parity run them on the lock. Three things must hold. The distribution's version is the pinned one, - exactly, so a post-release or a local build of it (``2.164.2.post1``, - ``2.164.2+local``) is refused. ``policyengine_uk`` imports from that + exactly, so a post-release or a local build of it (``2.165.1.post1``, + ``2.165.1+local``) is refused. ``policyengine_uk`` imports from that distribution's own files, so a copy earlier on ``sys.path`` or an editable install is refused. And its ``__init__.py`` matches the distribution's RECORD, so a stale record beside other files is refused where the files diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_capital_coherence.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_capital_coherence.py index cc841c75c4..26dd58c2ad 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_capital_coherence.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/uc_capital_coherence.py @@ -76,7 +76,7 @@ _UC_CAPITAL_LEVELS = ("exact_cell", *UC_CAPITAL_COARSENING) #: The UC capital limits the receipt measures the redraw against. _UC_CAPITAL_RECEIPT_LIMITS = (6_000.0, 16_000.0) -#: policyengine-uk 2.164.2 counts these household property values as Universal +#: policyengine-uk 2.165.1 counts these household property values as Universal #: Credit capital (``property_sources`` under #: ``gov.dwp.universal_credit.means_test.capital``, at 90% of value less any #: secured debt since 2.136.1) and as Pension Credit capital (the ``sources`` diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/worker_identity.py b/packages/microcosm-build/src/microcosm/build/us_runtime/worker_identity.py index 0598be3f5b..3dfc34b6f5 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/worker_identity.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/worker_identity.py @@ -28,7 +28,7 @@ PRIMARY_QRF_WORKER_MODULE = "microcosm.build.us_runtime.puf_qrf_worker" PRIMARY_QRF_INTERPRETER_PLACEHOLDER = "{python_interpreter}" APPROVED_UV_LOCK_SHA256 = ( - "a6e91aa722c5cf43a0a1d724b6fc3e0556eb0b89692d410f0adfa6f669426839" + "e7d00ea479fe479bc76b0b68394d6c80cda23ed648b55a1a48667016ea5035c3" ) LEGACY_CAMPAIGN_UV_LOCK_SHA256 = ( "27f47e385cfa35e2644a37410d1804b361ad9aee123577551c8421547bda65ee" diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_childcare_targets.py b/packages/microcosm-build/tests/engine/uk/test_uk_childcare_targets.py index ff16c0ad3d..384f27df11 100644 --- a/packages/microcosm-build/tests/engine/uk/test_uk_childcare_targets.py +++ b/packages/microcosm-build/tests/engine/uk/test_uk_childcare_targets.py @@ -17,6 +17,15 @@ def test_childcare_target_formula_contracts_match_the_installed_engine() -> None system.variables["universal_childcare_entitlement_eligible"].formula ) tax_free_source = inspect.getsource(system.variables["tax_free_childcare"].formula) + # From 2.165.1 the top-up is one helper, shared with the comparison that + # lets a family keep Tax-Free Childcare over a smaller UC award + # (pe-uk#2754), and the helper reads the spend the build routes. + from policyengine_uk.variables.gov.hmrc.tax_free_childcare import _top_up + + top_up_source = inspect.getsource(_top_up.tax_free_childcare_top_up) + without_uc_source = inspect.getsource( + system.variables["tax_free_childcare_without_universal_credit"].formula + ) # From 2.128.1 a child on the working parent entitlement keeps the # universal hours (pe-uk#2177), so the universal-only row must leave the @@ -35,7 +44,9 @@ def test_childcare_target_formula_contracts_match_the_installed_engine() -> None "variable": "dfe_spring_working_parent", "equals": False, } in universal_only["bindings"]["policyengine"]["filters"] - assert "tax_free_childcare_spend_routed_share" in tax_free_source + assert "tax_free_childcare_top_up(" in tax_free_source + assert "tax_free_childcare_top_up(" in without_uc_source + assert "tax_free_childcare_spend_routed_share" in top_up_source # The spring-term measures (dfe_spring_term.py) count a family that does # not claim the universal or targeted hours on their own when the engine diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_dfe_spring_term.py b/packages/microcosm-build/tests/engine/uk/test_uk_dfe_spring_term.py index 2461abe46f..0d005ffc36 100644 --- a/packages/microcosm-build/tests/engine/uk/test_uk_dfe_spring_term.py +++ b/packages/microcosm-build/tests/engine/uk/test_uk_dfe_spring_term.py @@ -1,4 +1,4 @@ -"""The DfE spring-term measures on hand-built households (policyengine-uk 2.164.2).""" +"""The DfE spring-term measures on hand-built households (policyengine-uk 2.165.1).""" from __future__ import annotations diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_isa_income_contract.py b/packages/microcosm-build/tests/engine/uk/test_uk_isa_income_contract.py index e4ae3d834e..6b94d092bb 100644 --- a/packages/microcosm-build/tests/engine/uk/test_uk_isa_income_contract.py +++ b/packages/microcosm-build/tests/engine/uk/test_uk_isa_income_contract.py @@ -169,7 +169,7 @@ def test_a_2024_frame_read_at_2025_projects_each_component(tmp_path) -> None: """The build's frame is FRS 2024-25, read at 2025. Under legacy_gross the engine grows gross interest (by per-capita GDP, - 1.0462 to 2025 on policyengine-uk 2.164.2) and takes off the stored ISA part + 1.0462 to 2025 on policyengine-uk 2.165.1) and takes off the stored ISA part unchanged: 1,000 x 1.0462 - 300 and 300 x 0.0462 outside ISAs. The additive contract grows non-ISA and ISA interest each by its own index, so the ISA-only saver has no interest outside ISAs and both savers' ISA interest diff --git a/packages/microcosm-build/tests/engine_free/shared/test_engine_core_pins.py b/packages/microcosm-build/tests/engine_free/shared/test_engine_core_pins.py index e05cfe827e..1fd27fba3d 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_engine_core_pins.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_engine_core_pins.py @@ -33,7 +33,7 @@ #: policyengine-core its own floor brings. UK_ENGINE = { "policyengine-core": "3.33.3", - "policyengine-uk": "2.164.2", + "policyengine-uk": "2.165.1", } ENGINE_PACKAGES = ("microcosm-build", "microcosm-data", "microcosm-frame") diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py index 791a74d47e..13da07292a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py @@ -233,7 +233,7 @@ def test_uc_take_up_population_excludes_units_without_a_working_age_adult() -> N def test_uc_take_up_population_needs_a_claimant_or_partner_of_working_age() -> None: """A working-age dependant does not bring a unit into the UC population. - policyengine-uk 2.164.2's is_uc_eligible reads the age of the unit's UC + policyengine-uk 2.165.1's is_uc_eligible reads the age of the unit's UC claimant or partner (is_uc_claimant), not of any adult: a pensioner unit with an 18-year-old dependant cannot claim Universal Credit. """ diff --git a/packages/microcosm-data/pyproject.toml b/packages/microcosm-data/pyproject.toml index 90d3ccad8b..84b4916534 100644 --- a/packages/microcosm-data/pyproject.toml +++ b/packages/microcosm-data/pyproject.toml @@ -37,7 +37,7 @@ us = ["policyengine-us>=2.2.1,<3", "policyengine-core==3.32.5"] # The UK artifact lives in a PRIVATE repo (UK Data Service licence): loads # require an authenticated HF token with access. The loader surfaces the # 401 with that explanation rather than retrying. -uk = ["policyengine-uk>=2.164.2"] +uk = ["policyengine-uk>=2.165.1"] [project.urls] Homepage = "https://microcosm.institute" diff --git a/packages/microcosm-frame/pyproject.toml b/packages/microcosm-frame/pyproject.toml index 2d1ce2b05e..980b59ff87 100644 --- a/packages/microcosm-frame/pyproject.toml +++ b/packages/microcosm-frame/pyproject.toml @@ -22,7 +22,7 @@ policyengine = [ "policyengine-core==3.32.5", "microunit>=0.1.0", ] -uk = ["policyengine-uk>=2.164.2"] +uk = ["policyengine-uk>=2.165.1"] # The Axiom adapter's PyPI-resolvable dependencies. The engine itself # (axiom-rules-engine + its dense native extension) is not on PyPI yet and # installs from a checkout; see microcosm/frame/adapters/axiom.py. diff --git a/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_uk_concepts.py b/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_uk_concepts.py index 8c524f6843..c6ceec357f 100644 --- a/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_uk_concepts.py +++ b/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_uk_concepts.py @@ -35,7 +35,7 @@ # --------------------------------------------------------------------------- # # Which PolicyEngine-UK inputs each engine-neutral concept feeds -# (microcosm.frame.concepts), reviewed against policyengine-uk 2.164.2. Every +# (microcosm.frame.concepts), reviewed against policyengine-uk 2.165.1. Every # target is a pure input (in ``PolicyEngineUKEngine.variables``). The UK # loader also accepts some formula-owned variables as overrides # (``employment_income``, ``state_pension_reported``, ``is_household_head``); @@ -398,6 +398,27 @@ "Lifetime ISA withdrawals they change nothing, so they stay false " "(microcosm#1095; for María's signature).", ), + **dict.fromkeys( + ( + "company_car_availability", + "company_car_capital_contributions", + "company_car_co2_emissions", + "company_car_electric_range", + "company_car_fuel_type", + "company_car_list_price", + "company_car_private_fuel_provided", + "company_car_private_use_payments", + "company_car_registered_from_6_april_2020", + ), + "The company car and car fuel benefits in kind and the Class 1A NICs " + "on them (policyengine-uk 2.165.0, policyengine-uk#2750) read these " + "person inputs, and a zero company_car_list_price means no company " + "car. Until a company car stage supplies them (the company car PR for " + "the Autumn Budget dashboard's #316), every list price is zero, so no " + "one has a company car and both benefits are zero: income tax and " + "employers' Class 1A NICs leave them out, as before 2.165.0, and " + "nothing else moves (microcosm#1095; for María's signature).", + ), "is_in_first_year_of_apprenticeship": ( "Whether an apprentice is in the first 12 months of the apprenticeship " "(policyengine-uk 2.162.8, policyengine-uk#2683): the apprentice " @@ -434,7 +455,7 @@ def _uk_take_up(program: str, entity: str) -> InputBinding: POLICYENGINE_UK_CONCEPT_MAPPING = ConceptMapping( engine="policyengine-uk", - engine_version="2.164.2", + engine_version="2.165.1", entity_correspondence={"person": "person", "household": "household"}, input_declaration=InputDeclaration.ENGINE_TYPED, bindings=( diff --git a/packages/microcosm-frame/tests/engine/uk/test_concept_mapping_policyengine_uk.py b/packages/microcosm-frame/tests/engine/uk/test_concept_mapping_policyengine_uk.py index db056d49dc..747da4d87c 100644 --- a/packages/microcosm-frame/tests/engine/uk/test_concept_mapping_policyengine_uk.py +++ b/packages/microcosm-frame/tests/engine/uk/test_concept_mapping_policyengine_uk.py @@ -131,7 +131,8 @@ def test_the_mapping_notes_formula_ownership_claims_hold(engine) -> None: def test_the_liquid_asset_reason_holds(engine) -> None: # Financial wealth is a household input. The person-level GBP stocks are a - # debt, a car's list price, the Lifetime ISA balance, which the engine + # debt, a car's list price, a company car's list price and the capital + # contributions towards it, the Lifetime ISA balance, which the engine # documents as already inside the household's financial wealth, and the # cash and stocks-and-shares ISA balances the household ISA totals sum. # uc_reported_capital defaults to -1 since policyengine-uk 2.136.1: set to @@ -161,6 +162,11 @@ def test_the_liquid_asset_reason_holds(engine) -> None: # (microcosm#1415). "cash_isa_balance", "stocks_and_shares_isa_balance", + # The company car (2.165.0): its list price and the employee's capital + # contributions towards it set the car benefit and are no one's capital; + # the build sets neither. + "company_car_capital_contributions", + "company_car_list_price", } for name in ("cash_isa", "stocks_and_shares_isa"): assert name not in inputs, name diff --git a/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json b/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json index 6c78f1d393..b402499529 100644 --- a/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json +++ b/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json @@ -405,8 +405,8 @@ } ], "engine": "policyengine-uk", - "engine_version": "2.164.2", - "input_count": 360, + "engine_version": "2.165.1", + "input_count": 369, "schema_sha256": "5a55669d0447a686692911a6327ae298f19741dde29559f2654a75807878a141", "structural_inputs": [ { @@ -723,6 +723,42 @@ "entity": "household", "name": "communication_consumption" }, + { + "entity": "person", + "name": "company_car_availability" + }, + { + "entity": "person", + "name": "company_car_capital_contributions" + }, + { + "entity": "person", + "name": "company_car_co2_emissions" + }, + { + "entity": "person", + "name": "company_car_electric_range" + }, + { + "entity": "person", + "name": "company_car_fuel_type" + }, + { + "entity": "person", + "name": "company_car_list_price" + }, + { + "entity": "person", + "name": "company_car_private_fuel_provided" + }, + { + "entity": "person", + "name": "company_car_private_use_payments" + }, + { + "entity": "person", + "name": "company_car_registered_from_6_april_2020" + }, { "entity": "household", "name": "consumer_debt" diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json index 94b2184da6..6223a7a37c 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json @@ -292,7 +292,7 @@ "cgt_residential_split": { "artifacts": [ { - "dependency": "policyengine-uk>=2.164.2 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.165.1 via microcosm-build[uk]", "dependency_discipline": "deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time", "instant_rule": "raw dated parameter files evaluated at 1 June of the build period's tax year", "kind": "versioned_parameter_tree", @@ -2467,7 +2467,7 @@ "maximum_extended_childcare_hours_usage", "max_free_entitlement_hours_used" ], - "notes": "Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.164.2's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30.", + "notes": "Identity-keyed seed 0 streams replace the incumbent sequential take-up seed 100; salts are output variable names. Reported positive receipt anchors are transient and consumed only. The Universal Credit draw's population is the benefit units with a UC claimant or partner (is_uc_claimant) aged 18 or over and under Pension Credit qualifying age (66 for everyone who can reach it in this release), the age and role conditions of policyengine-uk 2.165.1's is_uc_eligible; the engine lockstep test pins it and names the three engine cases not mirrored (16- and 17-year-old claimants under the UC Regs 2013 reg 8 exceptions, mixed-age couples on the Pension Credit route, and from 2.128.0 pension-age families moved onto Universal Credit when their legacy benefit closes, SI 2014/1230 reg 60A). So the contract rate is a share of those units, an anchor outside them stays true, and any other unit is never drawn; a unit with no claimant or partner of that age keeps its reported Housing Benefit, which a claim it cannot make no longer zeroes (#882, microcosm#867, microcosm#1095). The universal childcare flag is nested under the working-parent one. A unit that claims the extended hours claims the universal hours, and any other unit claims them at the contract's universal_childcare rate, the rate conditional on not claiming the extended hours; the extended draw is unchanged. childcare_copy_take_up later re-draws the childcare flags and hours of the support and CGT copies on their own benefit units. A child of DfE age 0 or 1 (its age on 31 December of the fit's model year, the age DfE counts by) in a unit that claims the working-parent hours uses them at its age's contract rate, extended_childcare_age_0_usage or extended_childcare_age_1_usage (DfE registers far fewer of the youngest eligible children than of those aged 2 to 4, and fewer at 9 to 11 months than at age 1); a child that does not gets max_free_entitlement_hours_used 0, so the engine funds it no hours, and every other person keeps the engine's default of 30.", "operations": [ { "aggregates": { @@ -2648,7 +2648,7 @@ "hmrc_cgt_asset_type_spine": { "artifacts": [ { - "dependency": "policyengine-uk>=2.164.2 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.165.1 via microcosm-build[uk]", "dependency_discipline": "deferred inside uk_cgt_policy_parameters and uk_cgt_badr_parameters; the base package never imports policyengine-uk at import time", "instant_rule": "raw dated parameter files evaluated at 1 June of the build period's tax year", "kind": "versioned_parameter_tree", @@ -6792,7 +6792,7 @@ "artifacts": [], "grain": "benunit", "nonnegative_outputs": [], - "notes": "Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.164.2 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (Mar\u00eda's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base.", + "notes": "Runs after the last universal_credit_reported writer and before CGT cloning. Redraws every SPI benefit unit's capital, since the channel's incomes are SPI draws and the copied FRS answer no longer belongs to the unit (uk-data#495, microcosm#1095), from weighted base-FRS units with available capital in cells of UC reporter status by financial investment income band (interest, dividends and other investment income; property income is excluded because TOTCAPB4 counts accounts and assets) by is_uc_couple (two retained FRS claimant/partner roles, independently of legal is_married) by dependent-children band. A cell with fewer than 20 donors widens in the declared coarsening order, and reporter status is never coarsened. It then applies the monotone reported-UC OR refresh. The recorded capitals add property (uk-data#495, microcosm#1095), since policyengine-uk 2.165.1 replaces every capital source with a recorded figure of 0 or more and takes it as countable, and TOTCAPB4 has no property. WAS records the property for the household, and each means test counts the claimant's and partner's own capital (UC Regs 2013 reg 18; SPCA 2002 s.5). The household reference person's benefit unit therefore holds all of the household's property, and no other unit records any (Mar\u00eda's ruling of 2026-10-12), since that person is the one in whose name the home is owned or rented, the best single reading of the owner. The engine shares household property over every claimant or partner instead, which puts a parent's property on an adult child's claim; a recorded figure consumes its own unit's share, so the engine's shares reach only a unit on the unavailable sentinel, and since policyengine-uk 2.136.1 such a unit takes its share whatever a recording unit beside it holds (the receipt counts any unit left there). The property counts at 90% of its value, market value less 10% for the costs of sale, less the debt secured on it, class by class and floored at zero per class (UC Regs 2013 reg 49(1); SPC Regs 2002 reg 19), as policyengine-uk values Universal Credit property capital. The was_wealth stage draws the debt on other residential and on non-residential property (microcosm#1095), and owned land carries none, as the engine has no input for it (pe-uk#1969). Universal Credit counts other residential and non-residential property, and Pension Credit counts those and owned land. A unit that reports Universal Credit keeps its receipt and records the carrier alone for Universal Credit, since DWP assessed its capital to pay it and the property is imputed without that receipt. frs_benunit_capital stays the financial carrier, and its unavailable sentinel -1 passes through to both. Both recorded figures project to later years by GDP per head, as financial capital does, while policyengine-uk 2.139.1 projects other residential property by house prices, so the other residential property in a recorded figure grows faster than the engine's own projection of it; by the OBR indices the engine carries, it grows 1.5% faster by 2025 and 2.0% by 2026 from a 2024 base.", "operations": [ { "aggregates": { diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json index 2ea4065222..a6e25186b8 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json @@ -1 +1 @@ -{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"e7beb407fa3d58f989e55aaec701c4ded2f16c50bafaff787d4e22fbac357e10","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employment_income","employment_status","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_apprentice","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"112c502d702c640dedbc2dca7d1cfe5ae43e0f0e3ba6acfe49c738dbbfb7e693","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"950f9cfb0975ee44f3066a5e063f693804a4304f32c149ccaa20ba4da846e711","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"67dc8501d9cd8d1ddd0fe351ea384fd3f92be98b370e53383a7a915b95729937","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"90e843841058517a29523cc1f5a74cf83007dcb579b2cf7ea82d69180e741a0d","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"7800edee6e23931f4ef0187b0885c33863ba76228b69b54aae3405054202fe09","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","individual_savings_account_interest_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"850da37e6ae08cfe610c53a44cbc05ebbef8729bd7d688609af465fe08ec88fe","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"5b88e8909f877c5940e05d10c5564c6c647eae4c94e0ec724c4cb5ef5b87d6ee","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"2623c8067ed3d6637afe470897a7301211b8856108c88f8dbbc4f32f654f53d6","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"f2df489860bb76ee21452200745b39161a8928863568d765f2e6c72d806df796","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"wine_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"spirits_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_fermented_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigarettes_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"hand_rolling_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigars_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_gaming_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"pool_betting_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bingo_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"national_lottery_ticket_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_casino_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_lower_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_standard_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_higher_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_fixed_odds_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_uk_horseracing_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_other_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"betting_exchange_commission","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"horse_and_dog_pool_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"e88c7ecba5795b6a3967e56fdf5478d3aeb062c18c6395632c6e43922d2e272c","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"216b28835eba7a952243134dffbb45a1b3a0cdff2e3e7d0e94e2acbf754052b5","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"109ef53445b3d6e309a021b318ec0612a57364f4ddd8273aad14bf9a07ee66de","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","individual_savings_account_interest_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"67478de55540a138448d9da387a64e5e2afbb17caf17b244bc3baaa34de56022","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"fdf572b7d163a1c14a8351e821087437ccc4b228434d72e640e94dc9151bbc90","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"18e61348e905303d73e04011a489a7f8d4775aad7c6c13526d02f7188e10fae9","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"e897108e9009f243a1ec32b1a998c482ab59965fd44877b1ec071b251f98291a","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"dc1f00f90dd7e3f09d7da9601c85b45f3145e4c053d237e1892b280b24d0978f","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"477b66768c4881f450ac33c68da201a9e6b58cea6c71962041323d134f645ede","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"29198953c5522c9b996b981478909916870977a79e9f2feb2db7e9e72ef15de8","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","individual_savings_account_interest_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"42a3f2c4434a274de28f0a1cabbb790e95add5d27f11a35afa8782a143833a2e","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","individual_savings_account_interest_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"ed54c55428e56d7597c57c8459b014aa43b2ff9495b903f0b789bd5e4264ca9a","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"13206bb3c33dc40dd2c093d9d8beba06bfc4a616d0b670d055f78f6e54ef3a1f","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"e6775a1745cfbb9093018d3d0f19308a99e0a6f48280583b1ac3f4131be8dd27","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"3ab9191640a76c6605150116581a30afe6f6b6dadad13f7e8a31aaff940d6367","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage isa_subscriptions.","id":"isa_subscriptions","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cash_isa","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","attends_private_school","dividend_income","employment_income","gender","has_lifetime_isa","individual_savings_account_interest_income","lifetime_isa_balance","loss_relief","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.isa_subscriptions@1","mass":"conserve","outputs":[{"column":"cash_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"cash_isa_subscriptions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa_subscriptions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_payments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.164.2"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"isa_subscriptions","stage_contract_sha256":"09637b7e0ed87faf0ddb2d160f171accb1acf3e9b53b708ac2d56c9d92dfe221","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} +{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"e7beb407fa3d58f989e55aaec701c4ded2f16c50bafaff787d4e22fbac357e10","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_care_hours_in_household","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employment_income","employment_status","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_apprentice","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"112c502d702c640dedbc2dca7d1cfe5ae43e0f0e3ba6acfe49c738dbbfb7e693","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"950f9cfb0975ee44f3066a5e063f693804a4304f32c149ccaa20ba4da846e711","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"2475738aee1e2bba3d93a759ee77b7b1a62e6a87feb07ac7b86c9150d2769009","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"90e843841058517a29523cc1f5a74cf83007dcb579b2cf7ea82d69180e741a0d","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"individual_savings_account_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"7800edee6e23931f4ef0187b0885c33863ba76228b69b54aae3405054202fe09","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","individual_savings_account_interest_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"850da37e6ae08cfe610c53a44cbc05ebbef8729bd7d688609af465fe08ec88fe","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"5b88e8909f877c5940e05d10c5564c6c647eae4c94e0ec724c4cb5ef5b87d6ee","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"2623c8067ed3d6637afe470897a7301211b8856108c88f8dbbc4f32f654f53d6","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"f2df489860bb76ee21452200745b39161a8928863568d765f2e6c72d806df796","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"wine_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"spirits_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_fermented_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigarettes_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"hand_rolling_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigars_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_gaming_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"pool_betting_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bingo_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"national_lottery_ticket_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_casino_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_lower_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_standard_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_higher_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_fixed_odds_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_uk_horseracing_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_other_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"betting_exchange_commission","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"horse_and_dog_pool_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"e88c7ecba5795b6a3967e56fdf5478d3aeb062c18c6395632c6e43922d2e272c","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"216b28835eba7a952243134dffbb45a1b3a0cdff2e3e7d0e94e2acbf754052b5","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"109ef53445b3d6e309a021b318ec0612a57364f4ddd8273aad14bf9a07ee66de","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","individual_savings_account_interest_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"67478de55540a138448d9da387a64e5e2afbb17caf17b244bc3baaa34de56022","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"fdf572b7d163a1c14a8351e821087437ccc4b228434d72e640e94dc9151bbc90","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"18e61348e905303d73e04011a489a7f8d4775aad7c6c13526d02f7188e10fae9","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"e897108e9009f243a1ec32b1a998c482ab59965fd44877b1ec071b251f98291a","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"dc1f00f90dd7e3f09d7da9601c85b45f3145e4c053d237e1892b280b24d0978f","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"477b66768c4881f450ac33c68da201a9e6b58cea6c71962041323d134f645ede","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"29198953c5522c9b996b981478909916870977a79e9f2feb2db7e9e72ef15de8","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","individual_savings_account_interest_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"42a3f2c4434a274de28f0a1cabbb790e95add5d27f11a35afa8782a143833a2e","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","individual_savings_account_interest_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"ed54c55428e56d7597c57c8459b014aa43b2ff9495b903f0b789bd5e4264ca9a","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"19247d4858644eebe2522f8724e058a6e6a16296550f110831e8c7f051d93159","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"984d5f000adce8fa3c79d499d6441c96fe0b7f8fcb2fbbe3177501003e05079b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"6b9d933d3216a3d82976e02e7432c9e1afb30a2af0089e08cbfd985a1ccfa9c6","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","frs_care_hours_in_household","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","individual_savings_account_interest_income","savings_interest_income","dividend_income","other_investment_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","is_apprentice","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage isa_subscriptions.","id":"isa_subscriptions","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cash_isa","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","attends_private_school","dividend_income","employment_income","gender","has_lifetime_isa","individual_savings_account_interest_income","lifetime_isa_balance","loss_relief","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.isa_subscriptions@1","mass":"conserve","outputs":[{"column":"cash_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"cash_isa_subscriptions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa_subscriptions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_payments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.165.1"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"isa_subscriptions","stage_contract_sha256":"09637b7e0ed87faf0ddb2d160f171accb1acf3e9b53b708ac2d56c9d92dfe221","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} diff --git a/uv.lock b/uv.lock index b125c2883e..2a50699910 100644 --- a/uv.lock +++ b/uv.lock @@ -857,7 +857,7 @@ requires-dist = [ { name = "openpyxl", marker = "extra == 'uk'", specifier = ">=3.1" }, { name = "pandas", specifier = ">=2" }, { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.32.5" }, - { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.164.2" }, + { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.165.1" }, { name = "policyengine-us", marker = "extra == 'us'", specifier = ">=2.2.1,<3" }, { name = "pyarrow", specifier = ">=15" }, { name = "pyyaml", specifier = ">=6" }, @@ -936,7 +936,7 @@ requires-dist = [ { name = "microcosm-diagnostics", editable = "packages/microcosm-diagnostics" }, { name = "packaging", specifier = ">=24" }, { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.32.5" }, - { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.164.2" }, + { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.165.1" }, { name = "policyengine-us", marker = "extra == 'us'", specifier = ">=2.2.1,<3" }, ] provides-extras = ["us", "uk"] @@ -1055,7 +1055,7 @@ requires-dist = [ { name = "numpy", specifier = ">=2" }, { name = "pandas", specifier = ">=2.3" }, { name = "policyengine-core", marker = "extra == 'policyengine'", specifier = "==3.32.5" }, - { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.164.2" }, + { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.165.1" }, { name = "policyengine-us", marker = "extra == 'policyengine'", specifier = ">=2.2.1,<3" }, { name = "tables", marker = "extra == 'axiom'", specifier = ">=3" }, ] @@ -1675,7 +1675,7 @@ wheels = [ [[package]] name = "policyengine-uk" -version = "2.164.2" +version = "2.165.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "microdf-python" }, @@ -1683,9 +1683,9 @@ dependencies = [ { name = "pydantic" }, { name = "tables" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e5/b2/d0503e1c8f5b092a791411cf66ab9f35cd42fb78f81199dcf1af56af3a19/policyengine_uk-2.164.2.tar.gz", hash = "sha256:3ac770d130cb4bae0c05a62a60eb775e7da5e77f56bacbdd31cf38473690a88f", size = 3910802, upload-time = "2026-10-29T06:56:04.843Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/ce/df5ddeb39b25ab2b4d7ebfaa9109622cbcb000073fdcabd2f39a9503dc05/policyengine_uk-2.165.1.tar.gz", hash = "sha256:7b3620e0c3c3b612b36c4b8f37a802349e1c1332df6ece15329e12aa7a7ebc31", size = 3943824, upload-time = "2026-10-30T14:56:29.366Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/98/7519e6b1f5dfcb79c737aeb9d1e74998ea9f40b406bb271564cf8a744a4d/policyengine_uk-2.164.2-py3-none-any.whl", hash = "sha256:649c03d59d5deb8194690ce7b704206c3ffc90d2cde5661c1a806143a863ae09", size = 5655790, upload-time = "2026-10-29T06:56:02.178Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/4db973ea84deb97e32a4a67a832babbade2475f2df9edc7a2494dae86d69/policyengine_uk-2.165.1-py3-none-any.whl", hash = "sha256:e8327ffe22393d468f7c4bb0e1e18b8b8ed7241b1a5fcec447917196e8a1b4fa", size = 5720638, upload-time = "2026-10-30T14:56:26.834Z" }, ] [[package]] From e40eabd1b99388689ae599987809d9b18294455e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 30 Oct 2026 16:09:02 +0000 Subject: [PATCH 24/39] Expect each stage's rewrites in the graph records test 610a1bce7 records a stage's declared rewrites beside its outputs in the graph build's stage records, as d2a1f9cd4 does in the plan build (microcosm#721). The engine-lane test of the record projection still expected the outputs alone, so it failed on age_tail, which rewrites age. It now expects both, and the record's rewrote field. Co-Authored-By: Claude Opus 5.5 --- .../microcosm-build/tests/engine/uk/test_uk_graph.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_graph.py b/packages/microcosm-build/tests/engine/uk/test_uk_graph.py index e3cb52046e..a3d5f4030a 100644 --- a/packages/microcosm-build/tests/engine/uk/test_uk_graph.py +++ b/packages/microcosm-build/tests/engine/uk/test_uk_graph.py @@ -38,7 +38,7 @@ def test_spi_support_fixture_changes_person_mass_and_conserves_household_mass() def test_driver_projects_a_stage_record_for_every_graph_stage_on_the_fixture( tmp_path, ) -> None: - """The driver's record projection must cover every declared output. + """The driver's record projection must cover every declared output and rewrite. ``frs_spine`` declares the entity ids and memberships among its outputs, but the executor carries those outside owned cells, so the root node @@ -81,9 +81,12 @@ def test_driver_projects_a_stage_record_for_every_graph_stage_on_the_fixture( assert [record.stage for record in records] == [stage.stage for stage in stages] by_stage = {record.stage: record for record in records} for stage in stages: - assert set(by_stage[stage.stage].nonzero_share) == set(stage.outputs), ( - stage.stage - ) + # A declared rewrite is recorded beside the outputs (microcosm#721). + assert set(by_stage[stage.stage].nonzero_share) == { + *stage.outputs, + *stage.rewrites, + }, stage.stage + assert by_stage[stage.stage].rewrote == stage.rewrites, stage.stage root_shares = by_stage["frs_spine"].nonzero_share for column in ( "person_id", From 4962bc3f3d4d94772a6eb6b6dc649d0d2f5d360a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 30 Oct 2026 17:40:04 +0000 Subject: [PATCH 25/39] Window a selector's pinned dimension values as one series each R7 puts dfi_ni.bus.passenger_receipts on the calendar-2025 window. Its selector pins two services (Ulsterbus, and Metro and Glider), so each year carries two facts of one measure. The window counted series only from list-valued source concepts, measures and tables, so it read the two services as an ambiguous selector, and the row fell out of the references on the regeneration (a signed-deferral compile error). A dimension the selector pins to several values now names one series per value, as a list-valued source key does: the window of the sum is the sum of the windowed series, and a service short of a year refuses the whole window. A member's label in the window's metadata names the pinned dimension's value, so the two services stay apart. No other UK, US or NZ window reference pins several dimension values. Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/ledger_targets.py | 44 ++++++++++-- .../engine_free/shared/test_ledger_targets.py | 71 +++++++++++++++++++ 2 files changed, 109 insertions(+), 6 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 5fcf68cc57..13d7824f55 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -4022,7 +4022,8 @@ def _validate_calendar_year_window_reference( raise ValueError( f"LedgerTargetReference {reference.name!r}: calendar_year_window " f"reads {SOURCE_MEASURE_ID_BY_OPENING_YEAR!r} as one series; it " - "cannot be combined with a list-valued series key." + "cannot be combined with a list-valued series key or several " + "pinned dimension values." ) # The map's years are checked against the window when it resolves, not # here: a compile may restamp the reference to another period, and a map @@ -4345,22 +4346,53 @@ def _resolve_calendar_year_window_reference_facts( def _calendar_year_window_series_count(reference: LedgerTargetReference) -> int: - """How many series the window composes: one per declared selector member.""" + """How many series the window composes: one per declared selector member. + A dimension the selector pins to several values names one series per value, + as a list-valued source concept, measure or table does (DfI's Translink + receipts by service). + """ + + selector = reference.ledger_selector or {} count = 1 for key in _CALENDAR_YEAR_WINDOW_SERIES_KEYS: - value = (reference.ledger_selector or {}).get(key) + value = selector.get(key) if isinstance(value, (list, tuple)): count *= len(value) + for name in _calendar_year_window_listed_dimensions(reference): + count *= len(selector["dimension_values"][name]) return count -def _calendar_year_window_series_label(fact: object) -> str: - return ( +def _calendar_year_window_listed_dimensions( + reference: LedgerTargetReference, +) -> tuple[str, ...]: + """The dimensions the selector pins to several values, in name order.""" + + pins = (reference.ledger_selector or {}).get("dimension_values") or {} + return tuple( + sorted( + str(name) + for name, value in pins.items() + if isinstance(value, (list, tuple)) and len(value) > 1 + ) + ) + + +def _calendar_year_window_series_label( + fact: object, reference: LedgerTargetReference +) -> str: + label = ( _str_at(fact, "observed_measure", "source_measure_id") or _str_at(fact, "layout", "measure_id") or _source_measure_concept(fact) ) + listed = _calendar_year_window_listed_dimensions(reference) + if not listed: + return label + dimensions = _dimensions(fact) + members = ",".join(f"{name}={dimensions.get(name, '')}" for name in listed) + return f"{label}[{members}]" def _calendar_year_window_weights( @@ -4386,7 +4418,7 @@ def _calendar_year_window_metadata( member_key = ( str(opening_year) if series_count == 1 - else f"{_calendar_year_window_series_label(fact)}@{opening_year}" + else f"{_calendar_year_window_series_label(fact, reference)}@{opening_year}" ) members[member_key] = { "weight": f"{CALENDAR_YEAR_WINDOW_WEIGHTS[opening_year - target_year]:.15g}", diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index 4c69c7bae9..507086f1e9 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -5000,6 +5000,77 @@ def test__given_a_two_series_selector__then_calendar_year_window_sums_the_window assert members["outside_cap@2025"]["weight"] == "0.75" +def test__given_several_pinned_dimension_values__then_calendar_year_window_sums_each() -> ( + None +): + # Given: one measure published per service (DfI's Translink receipts), the + # selector pinning two services, each with both years of the window. + facts = [] + for service, values in ( + ("ulsterbus", (38.0, 38.4)), + ("metro_glider", (49.6, 49.0)), + ): + for opening_year, value in zip((2024, 2025), values, strict=True): + fact = _cy_window_fact( + key=f"{service}_fy{opening_year}", + value=value, + opening_year=opening_year, + measure_id="passenger_receipts", + ) + fact["dimensions"] = {**fact["dimensions"], "service": service} + facts.append(fact) + reference = _cy_window_reference( + name="bus passenger receipts, calendar 2025", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "passenger_receipts", + "geography_level": "country", + "geography_id": "0100000US", + "dimension_values": {"service": ["ulsterbus", "metro_glider"]}, + }, + ) + registry = compile_ledger_target_references(facts, [reference], country="uk") + + spec = registry.specs[0] + assert spec.value == pytest.approx(0.25 * (38.0 + 49.6) + 0.75 * (38.4 + 49.0)) + assert spec.metadata["ledger_calendar_year_window_series"] == "2" + members = json.loads(spec.metadata["ledger_calendar_year_window_members"]) + assert set(members) == { + "passenger_receipts[service=metro_glider]@2024", + "passenger_receipts[service=metro_glider]@2025", + "passenger_receipts[service=ulsterbus]@2024", + "passenger_receipts[service=ulsterbus]@2025", + } + + +def test__given_a_pinned_dimension_value_short_of_a_year__then_calendar_year_window_refuses() -> ( + None +): + facts = [] + for service, years in (("ulsterbus", (2024, 2025)), ("metro_glider", (2025,))): + for opening_year in years: + fact = _cy_window_fact( + key=f"{service}_fy{opening_year}", + value=10.0, + opening_year=opening_year, + measure_id="passenger_receipts", + ) + fact["dimensions"] = {**fact["dimensions"], "service": service} + facts.append(fact) + reference = _cy_window_reference( + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "passenger_receipts", + "geography_level": "country", + "geography_id": "0100000US", + "dimension_values": {"service": ["ulsterbus", "metro_glider"]}, + }, + ) + + with pytest.raises(ValueError, match="1 of 2 matched series carry both"): + compile_ledger_target_references(facts, [reference], country="uk") + + def test__given_a_two_series_selector_short_of_a_year__then_calendar_year_window_refuses() -> ( None ): From b46be0044a43890dae0fcd5354cae5f822cf6f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 30 Oct 2026 17:40:04 +0000 Subject: [PATCH 26/39] Regenerate the UK target surfaces on the merged tree (feed 53815b2) The one regeneration this PR owed after merging main: the national and local references, membership and compile-parity receipts on main's feed pin, Chronicle 53815b2 (#1420's re-pin), with policyengine-uk 2.165.1. The vendored resources check against the full artifact unchanged, and the local census, the local references, the local parity receipt and the coverage manifest regenerate unchanged. National surface (1,439 candidates, 396 contract targets): - 1,409 active references, up from 1,403, and no row without a fact (4 before): the three OBR council tax nation rows pinned to the UK (D14e, held as measured diagnostics) and SLC's three nation rows (R4; Wales binds, Scotland and Northern Ireland are held). - The eight DfE rows select the January 2026 census (observation_period 2026-01) at model year 2025, with no uprating (D5). - Scottish Child Payment, the Tax-Free Childcare top-up, Northern Ireland's bus receipts and SLC's four England repayment rows take the calendar-2025 window (R7). - obr.council_tax binds the main-residence share of OBR's receipts (D14f). - The national compile-parity receipt: 1,409 compiled, 1,417 differences (calibration drift 561, fixture only 42, ledger only 814). The incumbent's three devolved SLC metrics now match the nation rows exactly. Local surface: 27,168 active references, every status count unchanged. The membership's signed deferrals fall from 94 to 77: a target scoped to Wales or Scotland no longer defers the two English micro-authorities (microcosm#796, via #1095). The MSOA income deferral carries D18a's signed reason. Co-Authored-By: Claude Opus 5.5 --- ...ity_incumbent_2025_signed_differences.json | 112 +- .../uk/local_target_reference_membership.json | 4593 ++++++++--------- .../build/uk/target_reference_membership.json | 387 +- .../microcosm/build/uk/target_references.json | 207 +- 4 files changed, 2638 insertions(+), 2661 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json index dc1c625441..81fe7ee6c5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json @@ -1,11 +1,11 @@ { - "compiled_count": 1403, + "compiled_count": 1409, "counts_by_kind": { - "calibration_drift": 557, - "fixture_only": 48, + "calibration_drift": 561, + "fixture_only": 42, "ledger_only": 814 }, - "difference_count": 1419, + "difference_count": 1417, "differences": [ { "fixture_value": 1608000.0, @@ -126,27 +126,6 @@ "period": 2025, "reason": "PR #889 retains the exact March 2026 OBR FY2025-26 cash forecast as diagnostic provenance outside the FY2024-25 observation fit. The frozen incumbent fixture keeps its fitted cash row, so it is fixture-only on the current surface. This scoped change does not settle the general liability-to-cash translation tracked by #875." }, - { - "fixture_value": 44117237614.71528, - "kind": "fixture_only", - "name": "obr.council_tax_england", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 3051227494.93594, - "kind": "fixture_only", - "name": "obr.council_tax_scotland", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 2400769752.36827, - "kind": "fixture_only", - "name": "obr.council_tax_wales", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, { "fixture_value": 24241874775.213375, "kind": "fixture_only", @@ -322,27 +301,6 @@ "period": 2025, "reason": "microcosm#1095 (María's ruling of 2026-10-22) retires SLC's England postgraduate repayments from the targets: the student-loans stage assigns no postgraduate plan and policyengine-uk holds one plan a person, so no record carries the repayments (microcosm#757). The frozen fixture's fitted row is fixture-only on the current surface." }, - { - "fixture_value": 181700000.0, - "kind": "fixture_only", - "name": "slc/student_loan_repayment/northern_ireland", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 203300000.0, - "kind": "fixture_only", - "name": "slc/student_loan_repayment/scotland", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 229100000.0, - "kind": "fixture_only", - "name": "slc/student_loan_repayment/wales", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, { "kind": "ledger_only", "ledger_value": 60195.0, @@ -366,63 +324,63 @@ }, { "kind": "ledger_only", - "ledger_value": 95031.0, + "ledger_value": 85629.0, "name": "dfe.funded_childcare.early_learning_2_year_olds", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, { "kind": "ledger_only", - "ledger_value": 565954.0, + "ledger_value": 535209.0, "name": "dfe.funded_childcare.universal_nursery_children_age_3", "period": 2025, "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", - "ledger_value": 396965.0, + "ledger_value": 362581.0, "name": "dfe.funded_childcare.universal_only_children", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, { "kind": "ledger_only", - "ledger_value": 621482.0, + "ledger_value": 648979.0, "name": "dfe.funded_childcare.working_parent_children_2_to_4", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, { "kind": "ledger_only", - "ledger_value": 29155.0, + "ledger_value": 30679.0, "name": "dfe.funded_childcare.working_parent_children_9_to_11_months", "period": 2025, "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", - "ledger_value": 195104.0, + "ledger_value": 210825.0, "name": "dfe.funded_childcare.working_parent_children_age_1", "period": 2025, "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", - "ledger_value": 242453.0, + "ledger_value": 260238.0, "name": "dfe.funded_childcare.working_parent_children_age_2", "period": 2025, "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", - "ledger_value": 278640.0, + "ledger_value": 278490.0, "name": "dfe.funded_childcare.working_parent_children_age_3", "period": 2025, "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", - "ledger_value": 152500000.0, + "ledger_value": 151900000.0, "name": "dfi_ni.bus.passenger_receipts", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." @@ -5441,7 +5399,7 @@ }, { "kind": "ledger_only", - "ledger_value": 599800000.0, + "ledger_value": 607900000.0, "name": "hmrc.tfc.government_top_up", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." @@ -9068,11 +9026,35 @@ { "fixture_value": 50925163826.30539, "kind": "calibration_drift", - "ledger_value": 48774253146.51462, + "ledger_value": 47197225993.12901, "name": "obr.council_tax", "period": 2025, "reason": "Series and period basis (microcosm#1095, María's ruling of 2026-10-09): ours binds OBR table 4.1 row 15, the council tax receipts of England, Scotland and Wales, over Great Britain's households, at the calendar-2025 window (three twelfths of FY2024-25 and nine twelfths of FY2025-26, María's rule of 2026-09-22, PolicyEngine/chronicle#280 lane); the frozen incumbent fixture holds the FY2025-26 value of row 19 alone, which adds Northern Ireland domestic rates, the council tax accruals adjustment and the high-value council tax surcharge." }, + { + "fixture_value": 44117237614.71528, + "kind": "calibration_drift", + "ledger_value": 43393548211.03646, + "name": "obr.council_tax_england", + "period": 2025, + "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." + }, + { + "fixture_value": 3051227494.93594, + "kind": "calibration_drift", + "ledger_value": 3023016871.201955, + "name": "obr.council_tax_scotland", + "period": 2025, + "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." + }, + { + "fixture_value": 2400769752.36827, + "kind": "calibration_drift", + "ledger_value": 2357688064.2762027, + "name": "obr.council_tax_wales", + "period": 2025, + "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." + }, { "fixture_value": 7206287181.538654, "kind": "calibration_drift", @@ -10369,10 +10351,18 @@ "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." }, + { + "fixture_value": 471000000.0, + "kind": "calibration_drift", + "ledger_value": 467200000.0, + "name": "scotgov.scottish_child_payment_spending", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, { "fixture_value": 1852699178.55, "kind": "calibration_drift", - "ledger_value": 1604190700.89, + "ledger_value": 1666317820.305, "name": "slc.repayments.england_plan_1", "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." @@ -10380,7 +10370,7 @@ { "fixture_value": 2778253361.64, "kind": "calibration_drift", - "ledger_value": 3234379913.2999997, + "ledger_value": 3120348275.3849993, "name": "slc.repayments.england_plan_2", "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." @@ -10388,7 +10378,7 @@ { "fixture_value": 40869580.81, "kind": "calibration_drift", - "ledger_value": 73713378.39, + "ledger_value": 65502428.995000005, "name": "slc.repayments.england_plan_5", "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." @@ -10396,7 +10386,7 @@ { "fixture_value": 5018231834.95, "kind": "calibration_drift", - "ledger_value": 5339303976.37, + "ledger_value": 5259035941.014999, "name": "slc.repayments.england_total_higher_education", "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." diff --git a/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json index 4da03725b0..cb19c590a7 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json @@ -10865,7 +10865,7 @@ "target_id": "dwp.uc.households_by_area", "geography_level": "constituency", "reason_id": "uc_gb_only_ni_absent", - "rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts.", + "rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c).", "area_ids": [ "N05000001", "N05000002", @@ -10891,7 +10891,7 @@ "target_id": "dwp.uc.households_by_area", "geography_level": "local_authority", "reason_id": "uc_gb_only_ni_absent", - "rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts.", + "rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c).", "area_ids": [ "N09000001", "N09000002", @@ -11092,8 +11092,8 @@ { "target_id": "ons.equiv_net_income_bhc", "geography_level": "local_authority", - "reason_id": "msoa_mean_to_la_deferred", - "rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design.", + "reason_id": "frs_model_based_circularity", + "rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a).", "area_ids": [ "E06000001", "E06000002", @@ -11461,8 +11461,8 @@ { "target_id": "ons.equiv_net_income_ahc", "geography_level": "local_authority", - "reason_id": "msoa_mean_to_la_deferred", - "rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design.", + "reason_id": "frs_model_based_circularity", + "rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a).", "area_ids": [ "E06000001", "E06000002", @@ -11830,8 +11830,8 @@ { "target_id": "ons.equiv_housing_costs", "geography_level": "local_authority", - "reason_id": "msoa_mean_to_la_deferred", - "rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design.", + "reason_id": "frs_model_based_circularity", + "rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a).", "area_ids": [ "E06000001", "E06000002", @@ -14636,193 +14636,6 @@ ], "defer_if_compiles": true }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_a", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_b", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_c", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_d", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_e", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_f", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_g", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_h", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "welshgov.council_tax_stock.by_area.band_i", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_a", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_b", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_c", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_d", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_e", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_f", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_g", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, - { - "target_id": "scotgov.council_tax_stock.by_area.band_h", - "geography_level": "local_authority", - "reason_id": "local_authority_support_floor_excluded", - "rationale": "E06000053 and E09000001 are reviewed exclusions of the local-authority support floor (uk/local_area_support_exclusions.json, microcosm#762 A4): each misses the floor at every K measured. Their own local-authority cells are signed-deferred on the same evidence; their rows stay in the solve through the constituency families and the national rows (A14 amendment to A4).", - "area_ids": [ - "E06000053", - "E09000001" - ], - "defer_if_compiles": true - }, { "target_id": "hmrc.higher_rate_taxpayers.count", "geography_level": "local_authority", @@ -374045,7 +373858,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000002", @@ -374057,7 +373870,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000003", @@ -374069,7 +373882,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000004", @@ -374081,7 +373894,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000005", @@ -374093,7 +373906,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000006", @@ -374105,7 +373918,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000007", @@ -374117,7 +373930,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000008", @@ -374129,7 +373942,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000009", @@ -374141,7 +373954,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000010", @@ -374153,7 +373966,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000011", @@ -374165,7 +373978,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000012", @@ -374177,7 +373990,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000013", @@ -374189,7 +374002,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000014", @@ -374201,7 +374014,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000015", @@ -374213,7 +374026,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000016", @@ -374225,7 +374038,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000017", @@ -374237,7 +374050,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N05000018", @@ -374249,7 +374062,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-area facts in the pinned feed cover Great Britain only: 632/650 PCON24 constituencies compile and the 18 Northern Ireland constituencies have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@S14000021", @@ -379270,7 +379083,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000002", @@ -379282,7 +379095,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000003", @@ -379294,7 +379107,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000004", @@ -379306,7 +379119,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000005", @@ -379318,7 +379131,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000006", @@ -379330,7 +379143,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000007", @@ -379342,7 +379155,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000008", @@ -379354,7 +379167,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000009", @@ -379366,7 +379179,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000010", @@ -379378,7 +379191,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@N09000011", @@ -379390,7 +379203,7 @@ "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", "signed_reason_id": "uc_gb_only_ni_absent", - "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts." + "signed_rationale": "DWP Stat-Xplore Universal Credit local-authority facts in the pinned feed cover Great Britain only: 350/361 local authorities compile and the 11 Northern Ireland local authorities have no UC household facts; DfC publishes Northern Ireland's UC claimants, counting a joint claim twice (uk-data#590), not households, so they stay out (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18c)." }, { "name": "dwp.uc.households_by_area@S12000005", @@ -413886,8 +413699,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000002", @@ -413898,8 +413711,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000003", @@ -413910,8 +413723,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000004", @@ -413922,8 +413735,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000005", @@ -413934,8 +413747,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000006", @@ -413946,8 +413759,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000007", @@ -413958,8 +413771,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000008", @@ -413970,8 +413783,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000009", @@ -413982,8 +413795,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000010", @@ -413994,8 +413807,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000011", @@ -414006,8 +413819,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000012", @@ -414018,8 +413831,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000013", @@ -414030,8 +413843,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000014", @@ -414042,8 +413855,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000015", @@ -414054,8 +413867,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000016", @@ -414066,8 +413879,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000017", @@ -414078,8 +413891,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000018", @@ -414090,8 +413903,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000019", @@ -414102,8 +413915,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000020", @@ -414114,8 +413927,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000021", @@ -414126,8 +413939,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000022", @@ -414138,8 +413951,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000023", @@ -414150,8 +413963,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000024", @@ -414162,8 +413975,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000025", @@ -414174,8 +413987,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000026", @@ -414186,8 +413999,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000027", @@ -414198,8 +414011,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000030", @@ -414210,8 +414023,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000031", @@ -414222,8 +414035,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000032", @@ -414234,8 +414047,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000033", @@ -414246,8 +414059,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000034", @@ -414258,8 +414071,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000035", @@ -414270,8 +414083,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000036", @@ -414282,8 +414095,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000037", @@ -414294,8 +414107,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000038", @@ -414306,8 +414119,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000039", @@ -414318,8 +414131,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000040", @@ -414330,8 +414143,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000041", @@ -414342,8 +414155,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000042", @@ -414354,8 +414167,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000043", @@ -414366,8 +414179,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000044", @@ -414378,8 +414191,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000045", @@ -414390,8 +414203,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000046", @@ -414402,8 +414215,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000047", @@ -414414,8 +414227,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000049", @@ -414426,8 +414239,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000050", @@ -414438,8 +414251,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000051", @@ -414450,8 +414263,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000052", @@ -414462,8 +414275,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000053", @@ -414474,8 +414287,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000054", @@ -414486,8 +414299,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000055", @@ -414498,8 +414311,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000056", @@ -414510,8 +414323,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000057", @@ -414522,8 +414335,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000058", @@ -414534,8 +414347,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000059", @@ -414546,8 +414359,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000060", @@ -414558,8 +414371,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000061", @@ -414570,8 +414383,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000062", @@ -414582,8 +414395,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000063", @@ -414594,8 +414407,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000064", @@ -414606,8 +414419,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000065", @@ -414618,8 +414431,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E06000066", @@ -414630,8 +414443,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000008", @@ -414642,8 +414455,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000009", @@ -414654,8 +414467,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000010", @@ -414666,8 +414479,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000011", @@ -414678,8 +414491,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000012", @@ -414690,8 +414503,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000032", @@ -414702,8 +414515,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000033", @@ -414714,8 +414527,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000034", @@ -414726,8 +414539,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000035", @@ -414738,8 +414551,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000036", @@ -414750,8 +414563,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000037", @@ -414762,8 +414575,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000038", @@ -414774,8 +414587,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000039", @@ -414786,8 +414599,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000040", @@ -414798,8 +414611,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000041", @@ -414810,8 +414623,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000042", @@ -414822,8 +414635,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000043", @@ -414834,8 +414647,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000044", @@ -414846,8 +414659,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000045", @@ -414858,8 +414671,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000046", @@ -414870,8 +414683,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000047", @@ -414882,8 +414695,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000061", @@ -414894,8 +414707,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000062", @@ -414906,8 +414719,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000063", @@ -414918,8 +414731,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000064", @@ -414930,8 +414743,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000065", @@ -414942,8 +414755,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000066", @@ -414954,8 +414767,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000067", @@ -414966,8 +414779,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000068", @@ -414978,8 +414791,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000069", @@ -414990,8 +414803,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000070", @@ -415002,8 +414815,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000071", @@ -415014,8 +414827,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000072", @@ -415026,8 +414839,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000073", @@ -415038,8 +414851,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000074", @@ -415050,8 +414863,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000075", @@ -415062,8 +414875,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000076", @@ -415074,8 +414887,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000077", @@ -415086,8 +414899,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000078", @@ -415098,8 +414911,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000079", @@ -415110,8 +414923,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000080", @@ -415122,8 +414935,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000081", @@ -415134,8 +414947,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000082", @@ -415146,8 +414959,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000083", @@ -415158,8 +414971,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000084", @@ -415170,8 +414983,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000085", @@ -415182,8 +414995,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000086", @@ -415194,8 +415007,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000087", @@ -415206,8 +415019,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000088", @@ -415218,8 +415031,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000089", @@ -415230,8 +415043,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000090", @@ -415242,8 +415055,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000091", @@ -415254,8 +415067,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000092", @@ -415266,8 +415079,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000093", @@ -415278,8 +415091,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000094", @@ -415290,8 +415103,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000095", @@ -415302,8 +415115,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000096", @@ -415314,8 +415127,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000098", @@ -415326,8 +415139,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000099", @@ -415338,8 +415151,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000102", @@ -415350,8 +415163,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000103", @@ -415362,8 +415175,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000105", @@ -415374,8 +415187,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000106", @@ -415386,8 +415199,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000107", @@ -415398,8 +415211,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000108", @@ -415410,8 +415223,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000109", @@ -415422,8 +415235,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000110", @@ -415434,8 +415247,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000111", @@ -415446,8 +415259,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000112", @@ -415458,8 +415271,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000113", @@ -415470,8 +415283,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000114", @@ -415482,8 +415295,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000115", @@ -415494,8 +415307,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000116", @@ -415506,8 +415319,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000117", @@ -415518,8 +415331,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000118", @@ -415530,8 +415343,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000119", @@ -415542,8 +415355,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000120", @@ -415554,8 +415367,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000121", @@ -415566,8 +415379,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000122", @@ -415578,8 +415391,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000123", @@ -415590,8 +415403,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000124", @@ -415602,8 +415415,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000125", @@ -415614,8 +415427,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000126", @@ -415626,8 +415439,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000127", @@ -415638,8 +415451,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000128", @@ -415650,8 +415463,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000129", @@ -415662,8 +415475,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000130", @@ -415674,8 +415487,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000131", @@ -415686,8 +415499,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000132", @@ -415698,8 +415511,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000133", @@ -415710,8 +415523,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000134", @@ -415722,8 +415535,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000135", @@ -415734,8 +415547,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000136", @@ -415746,8 +415559,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000137", @@ -415758,8 +415571,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000138", @@ -415770,8 +415583,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000139", @@ -415782,8 +415595,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000140", @@ -415794,8 +415607,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000141", @@ -415806,8 +415619,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000142", @@ -415818,8 +415631,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000143", @@ -415830,8 +415643,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000144", @@ -415842,8 +415655,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000145", @@ -415854,8 +415667,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000146", @@ -415866,8 +415679,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000147", @@ -415878,8 +415691,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000148", @@ -415890,8 +415703,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000149", @@ -415902,8 +415715,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000170", @@ -415914,8 +415727,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000171", @@ -415926,8 +415739,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000172", @@ -415938,8 +415751,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000173", @@ -415950,8 +415763,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000174", @@ -415962,8 +415775,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000175", @@ -415974,8 +415787,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000176", @@ -415986,8 +415799,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000177", @@ -415998,8 +415811,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000178", @@ -416010,8 +415823,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000179", @@ -416022,8 +415835,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000180", @@ -416034,8 +415847,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000181", @@ -416046,8 +415859,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000192", @@ -416058,8 +415871,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000193", @@ -416070,8 +415883,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000194", @@ -416082,8 +415895,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000195", @@ -416094,8 +415907,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000196", @@ -416106,8 +415919,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000197", @@ -416118,8 +415931,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000198", @@ -416130,8 +415943,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000199", @@ -416142,8 +415955,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000200", @@ -416154,8 +415967,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000202", @@ -416166,8 +415979,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000203", @@ -416178,8 +415991,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000207", @@ -416190,8 +416003,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000208", @@ -416202,8 +416015,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000209", @@ -416214,8 +416027,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000210", @@ -416226,8 +416039,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000211", @@ -416238,8 +416051,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000212", @@ -416250,8 +416063,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000213", @@ -416262,8 +416075,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000214", @@ -416274,8 +416087,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000215", @@ -416286,8 +416099,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000216", @@ -416298,8 +416111,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000217", @@ -416310,8 +416123,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000218", @@ -416322,8 +416135,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000219", @@ -416334,8 +416147,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000220", @@ -416346,8 +416159,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000221", @@ -416358,8 +416171,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000222", @@ -416370,8 +416183,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000223", @@ -416382,8 +416195,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000224", @@ -416394,8 +416207,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000225", @@ -416406,8 +416219,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000226", @@ -416418,8 +416231,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000227", @@ -416430,8 +416243,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000228", @@ -416442,8 +416255,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000229", @@ -416454,8 +416267,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000234", @@ -416466,8 +416279,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000235", @@ -416478,8 +416291,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000236", @@ -416490,8 +416303,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000237", @@ -416502,8 +416315,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000238", @@ -416514,8 +416327,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000239", @@ -416526,8 +416339,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000240", @@ -416538,8 +416351,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000241", @@ -416550,8 +416363,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000242", @@ -416562,8 +416375,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000243", @@ -416574,8 +416387,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000244", @@ -416586,8 +416399,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E07000245", @@ -416598,8 +416411,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000001", @@ -416610,8 +416423,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000002", @@ -416622,8 +416435,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000003", @@ -416634,8 +416447,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000004", @@ -416646,8 +416459,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000005", @@ -416658,8 +416471,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000006", @@ -416670,8 +416483,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000007", @@ -416682,8 +416495,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000008", @@ -416694,8 +416507,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000009", @@ -416706,8 +416519,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000010", @@ -416718,8 +416531,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000011", @@ -416730,8 +416543,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000012", @@ -416742,8 +416555,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000013", @@ -416754,8 +416567,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000014", @@ -416766,8 +416579,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000015", @@ -416778,8 +416591,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000016", @@ -416790,8 +416603,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000017", @@ -416802,8 +416615,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000018", @@ -416814,8 +416627,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000019", @@ -416826,8 +416639,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000021", @@ -416838,8 +416651,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000022", @@ -416850,8 +416663,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000023", @@ -416862,8 +416675,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000024", @@ -416874,8 +416687,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000025", @@ -416886,8 +416699,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000026", @@ -416898,8 +416711,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000027", @@ -416910,8 +416723,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000028", @@ -416922,8 +416735,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000029", @@ -416934,8 +416747,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000030", @@ -416946,8 +416759,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000031", @@ -416958,8 +416771,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000032", @@ -416970,8 +416783,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000033", @@ -416982,8 +416795,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000034", @@ -416994,8 +416807,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000035", @@ -417006,8 +416819,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000036", @@ -417018,8 +416831,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E08000037", @@ -417030,8 +416843,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000001", @@ -417042,8 +416855,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000002", @@ -417054,8 +416867,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000003", @@ -417066,8 +416879,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000004", @@ -417078,8 +416891,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000005", @@ -417090,8 +416903,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000006", @@ -417102,8 +416915,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000007", @@ -417114,8 +416927,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000008", @@ -417126,8 +416939,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000009", @@ -417138,8 +416951,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000010", @@ -417150,8 +416963,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000011", @@ -417162,8 +416975,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000012", @@ -417174,8 +416987,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000013", @@ -417186,8 +416999,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000014", @@ -417198,8 +417011,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000015", @@ -417210,8 +417023,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000016", @@ -417222,8 +417035,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000017", @@ -417234,8 +417047,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000018", @@ -417246,8 +417059,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000019", @@ -417258,8 +417071,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000020", @@ -417270,8 +417083,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000021", @@ -417282,8 +417095,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000022", @@ -417294,8 +417107,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000023", @@ -417306,8 +417119,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000024", @@ -417318,8 +417131,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000025", @@ -417330,8 +417143,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000026", @@ -417342,8 +417155,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000027", @@ -417354,8 +417167,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000028", @@ -417366,8 +417179,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000029", @@ -417378,8 +417191,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000030", @@ -417390,8 +417203,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000031", @@ -417402,8 +417215,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000032", @@ -417414,8 +417227,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@E09000033", @@ -417426,8 +417239,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000001", @@ -417438,8 +417251,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000002", @@ -417450,8 +417263,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000003", @@ -417462,8 +417275,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000004", @@ -417474,8 +417287,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000005", @@ -417486,8 +417299,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000006", @@ -417498,8 +417311,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000007", @@ -417510,8 +417323,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000008", @@ -417522,8 +417335,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000009", @@ -417534,8 +417347,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000010", @@ -417546,8 +417359,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@N09000011", @@ -417558,8 +417371,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000005", @@ -417570,8 +417383,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000006", @@ -417582,8 +417395,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000008", @@ -417594,8 +417407,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000010", @@ -417606,8 +417419,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000011", @@ -417618,8 +417431,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000013", @@ -417630,8 +417443,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000014", @@ -417642,8 +417455,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000017", @@ -417654,8 +417467,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000018", @@ -417666,8 +417479,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000019", @@ -417678,8 +417491,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000020", @@ -417690,8 +417503,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000021", @@ -417702,8 +417515,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000023", @@ -417714,8 +417527,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000026", @@ -417726,8 +417539,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000027", @@ -417738,8 +417551,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000028", @@ -417750,8 +417563,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000029", @@ -417762,8 +417575,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000030", @@ -417774,8 +417587,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000033", @@ -417786,8 +417599,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000034", @@ -417798,8 +417611,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000035", @@ -417810,8 +417623,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000036", @@ -417822,8 +417635,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000038", @@ -417834,8 +417647,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000039", @@ -417846,8 +417659,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000040", @@ -417858,8 +417671,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000041", @@ -417870,8 +417683,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000042", @@ -417882,8 +417695,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000045", @@ -417894,8 +417707,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000047", @@ -417906,8 +417719,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000048", @@ -417918,8 +417731,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000049", @@ -417930,8 +417743,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@S12000050", @@ -417942,8 +417755,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000001", @@ -417954,8 +417767,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000002", @@ -417966,8 +417779,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000003", @@ -417978,8 +417791,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000004", @@ -417990,8 +417803,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000005", @@ -418002,8 +417815,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000006", @@ -418014,8 +417827,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000008", @@ -418026,8 +417839,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000009", @@ -418038,8 +417851,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000010", @@ -418050,8 +417863,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000011", @@ -418062,8 +417875,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000012", @@ -418074,8 +417887,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000013", @@ -418086,8 +417899,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000014", @@ -418098,8 +417911,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000015", @@ -418110,8 +417923,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000016", @@ -418122,8 +417935,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000018", @@ -418134,8 +417947,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000019", @@ -418146,8 +417959,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000020", @@ -418158,8 +417971,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000021", @@ -418170,8 +417983,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000022", @@ -418182,8 +417995,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000023", @@ -418194,8 +418007,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_bhc@W06000024", @@ -418206,8 +418019,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." } ] } @@ -418229,8 +418042,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000002", @@ -418241,8 +418054,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000003", @@ -418253,8 +418066,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000004", @@ -418265,8 +418078,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000005", @@ -418277,8 +418090,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000006", @@ -418289,8 +418102,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000007", @@ -418301,8 +418114,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000008", @@ -418313,8 +418126,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000009", @@ -418325,8 +418138,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000010", @@ -418337,8 +418150,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000011", @@ -418349,8 +418162,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000012", @@ -418361,8 +418174,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000013", @@ -418373,8 +418186,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000014", @@ -418385,8 +418198,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000015", @@ -418397,8 +418210,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000016", @@ -418409,8 +418222,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000017", @@ -418421,8 +418234,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000018", @@ -418433,8 +418246,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000019", @@ -418445,8 +418258,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000020", @@ -418457,8 +418270,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000021", @@ -418469,8 +418282,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000022", @@ -418481,8 +418294,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000023", @@ -418493,8 +418306,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000024", @@ -418505,8 +418318,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000025", @@ -418517,8 +418330,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000026", @@ -418529,8 +418342,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000027", @@ -418541,8 +418354,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000030", @@ -418553,8 +418366,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000031", @@ -418565,8 +418378,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000032", @@ -418577,8 +418390,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000033", @@ -418589,8 +418402,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000034", @@ -418601,8 +418414,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000035", @@ -418613,8 +418426,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000036", @@ -418625,8 +418438,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000037", @@ -418637,8 +418450,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000038", @@ -418649,8 +418462,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000039", @@ -418661,8 +418474,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000040", @@ -418673,8 +418486,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000041", @@ -418685,8 +418498,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000042", @@ -418697,8 +418510,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000043", @@ -418709,8 +418522,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000044", @@ -418721,8 +418534,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000045", @@ -418733,8 +418546,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000046", @@ -418745,8 +418558,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000047", @@ -418757,8 +418570,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000049", @@ -418769,8 +418582,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000050", @@ -418781,8 +418594,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000051", @@ -418793,8 +418606,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000052", @@ -418805,8 +418618,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000053", @@ -418817,8 +418630,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000054", @@ -418829,8 +418642,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000055", @@ -418841,8 +418654,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000056", @@ -418853,8 +418666,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000057", @@ -418865,8 +418678,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000058", @@ -418877,8 +418690,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000059", @@ -418889,8 +418702,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000060", @@ -418901,8 +418714,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000061", @@ -418913,8 +418726,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000062", @@ -418925,8 +418738,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000063", @@ -418937,8 +418750,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000064", @@ -418949,8 +418762,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000065", @@ -418961,8 +418774,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E06000066", @@ -418973,8 +418786,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000008", @@ -418985,8 +418798,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000009", @@ -418997,8 +418810,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000010", @@ -419009,8 +418822,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000011", @@ -419021,8 +418834,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000012", @@ -419033,8 +418846,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000032", @@ -419045,8 +418858,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000033", @@ -419057,8 +418870,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000034", @@ -419069,8 +418882,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000035", @@ -419081,8 +418894,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000036", @@ -419093,8 +418906,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000037", @@ -419105,8 +418918,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000038", @@ -419117,8 +418930,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000039", @@ -419129,8 +418942,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000040", @@ -419141,8 +418954,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000041", @@ -419153,8 +418966,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000042", @@ -419165,8 +418978,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000043", @@ -419177,8 +418990,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000044", @@ -419189,8 +419002,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000045", @@ -419201,8 +419014,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000046", @@ -419213,8 +419026,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000047", @@ -419225,8 +419038,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000061", @@ -419237,8 +419050,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000062", @@ -419249,8 +419062,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000063", @@ -419261,8 +419074,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000064", @@ -419273,8 +419086,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000065", @@ -419285,8 +419098,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000066", @@ -419297,8 +419110,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000067", @@ -419309,8 +419122,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000068", @@ -419321,8 +419134,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000069", @@ -419333,8 +419146,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000070", @@ -419345,8 +419158,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000071", @@ -419357,8 +419170,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000072", @@ -419369,8 +419182,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000073", @@ -419381,8 +419194,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000074", @@ -419393,8 +419206,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000075", @@ -419405,8 +419218,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000076", @@ -419417,8 +419230,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000077", @@ -419429,8 +419242,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000078", @@ -419441,8 +419254,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000079", @@ -419453,8 +419266,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000080", @@ -419465,8 +419278,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000081", @@ -419477,8 +419290,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000082", @@ -419489,8 +419302,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000083", @@ -419501,8 +419314,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000084", @@ -419513,8 +419326,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000085", @@ -419525,8 +419338,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000086", @@ -419537,8 +419350,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000087", @@ -419549,8 +419362,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000088", @@ -419561,8 +419374,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000089", @@ -419573,8 +419386,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000090", @@ -419585,8 +419398,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000091", @@ -419597,8 +419410,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000092", @@ -419609,8 +419422,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000093", @@ -419621,8 +419434,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000094", @@ -419633,8 +419446,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000095", @@ -419645,8 +419458,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000096", @@ -419657,8 +419470,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000098", @@ -419669,8 +419482,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000099", @@ -419681,8 +419494,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000102", @@ -419693,8 +419506,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000103", @@ -419705,8 +419518,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000105", @@ -419717,8 +419530,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000106", @@ -419729,8 +419542,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000107", @@ -419741,8 +419554,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000108", @@ -419753,8 +419566,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000109", @@ -419765,8 +419578,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000110", @@ -419777,8 +419590,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000111", @@ -419789,8 +419602,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000112", @@ -419801,8 +419614,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000113", @@ -419813,8 +419626,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000114", @@ -419825,8 +419638,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000115", @@ -419837,8 +419650,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000116", @@ -419849,8 +419662,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000117", @@ -419861,8 +419674,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000118", @@ -419873,8 +419686,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000119", @@ -419885,8 +419698,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000120", @@ -419897,8 +419710,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000121", @@ -419909,8 +419722,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000122", @@ -419921,8 +419734,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000123", @@ -419933,8 +419746,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000124", @@ -419945,8 +419758,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000125", @@ -419957,8 +419770,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000126", @@ -419969,8 +419782,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000127", @@ -419981,8 +419794,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000128", @@ -419993,8 +419806,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000129", @@ -420005,8 +419818,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000130", @@ -420017,8 +419830,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000131", @@ -420029,8 +419842,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000132", @@ -420041,8 +419854,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000133", @@ -420053,8 +419866,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000134", @@ -420065,8 +419878,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000135", @@ -420077,8 +419890,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000136", @@ -420089,8 +419902,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000137", @@ -420101,8 +419914,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000138", @@ -420113,8 +419926,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000139", @@ -420125,8 +419938,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000140", @@ -420137,8 +419950,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000141", @@ -420149,8 +419962,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000142", @@ -420161,8 +419974,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000143", @@ -420173,8 +419986,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000144", @@ -420185,8 +419998,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000145", @@ -420197,8 +420010,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000146", @@ -420209,8 +420022,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000147", @@ -420221,8 +420034,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000148", @@ -420233,8 +420046,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000149", @@ -420245,8 +420058,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000170", @@ -420257,8 +420070,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000171", @@ -420269,8 +420082,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000172", @@ -420281,8 +420094,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000173", @@ -420293,8 +420106,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000174", @@ -420305,8 +420118,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000175", @@ -420317,8 +420130,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000176", @@ -420329,8 +420142,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000177", @@ -420341,8 +420154,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000178", @@ -420353,8 +420166,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000179", @@ -420365,8 +420178,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000180", @@ -420377,8 +420190,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000181", @@ -420389,8 +420202,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000192", @@ -420401,8 +420214,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000193", @@ -420413,8 +420226,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000194", @@ -420425,8 +420238,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000195", @@ -420437,8 +420250,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000196", @@ -420449,8 +420262,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000197", @@ -420461,8 +420274,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000198", @@ -420473,8 +420286,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000199", @@ -420485,8 +420298,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000200", @@ -420497,8 +420310,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000202", @@ -420509,8 +420322,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000203", @@ -420521,8 +420334,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000207", @@ -420533,8 +420346,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000208", @@ -420545,8 +420358,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000209", @@ -420557,8 +420370,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000210", @@ -420569,8 +420382,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000211", @@ -420581,8 +420394,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000212", @@ -420593,8 +420406,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000213", @@ -420605,8 +420418,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000214", @@ -420617,8 +420430,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000215", @@ -420629,8 +420442,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000216", @@ -420641,8 +420454,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000217", @@ -420653,8 +420466,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000218", @@ -420665,8 +420478,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000219", @@ -420677,8 +420490,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000220", @@ -420689,8 +420502,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000221", @@ -420701,8 +420514,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000222", @@ -420713,8 +420526,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000223", @@ -420725,8 +420538,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000224", @@ -420737,8 +420550,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000225", @@ -420749,8 +420562,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000226", @@ -420761,8 +420574,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000227", @@ -420773,8 +420586,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000228", @@ -420785,8 +420598,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000229", @@ -420797,8 +420610,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000234", @@ -420809,8 +420622,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000235", @@ -420821,8 +420634,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000236", @@ -420833,8 +420646,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000237", @@ -420845,8 +420658,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000238", @@ -420857,8 +420670,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000239", @@ -420869,8 +420682,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000240", @@ -420881,8 +420694,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000241", @@ -420893,8 +420706,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000242", @@ -420905,8 +420718,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000243", @@ -420917,8 +420730,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000244", @@ -420929,8 +420742,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E07000245", @@ -420941,8 +420754,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000001", @@ -420953,8 +420766,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000002", @@ -420965,8 +420778,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000003", @@ -420977,8 +420790,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000004", @@ -420989,8 +420802,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000005", @@ -421001,8 +420814,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000006", @@ -421013,8 +420826,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000007", @@ -421025,8 +420838,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000008", @@ -421037,8 +420850,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000009", @@ -421049,8 +420862,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000010", @@ -421061,8 +420874,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000011", @@ -421073,8 +420886,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000012", @@ -421085,8 +420898,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000013", @@ -421097,8 +420910,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000014", @@ -421109,8 +420922,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000015", @@ -421121,8 +420934,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000016", @@ -421133,8 +420946,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000017", @@ -421145,8 +420958,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000018", @@ -421157,8 +420970,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000019", @@ -421169,8 +420982,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000021", @@ -421181,8 +420994,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000022", @@ -421193,8 +421006,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000023", @@ -421205,8 +421018,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000024", @@ -421217,8 +421030,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000025", @@ -421229,8 +421042,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000026", @@ -421241,8 +421054,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000027", @@ -421253,8 +421066,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000028", @@ -421265,8 +421078,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000029", @@ -421277,8 +421090,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000030", @@ -421289,8 +421102,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000031", @@ -421301,8 +421114,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000032", @@ -421313,8 +421126,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000033", @@ -421325,8 +421138,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000034", @@ -421337,8 +421150,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000035", @@ -421349,8 +421162,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000036", @@ -421361,8 +421174,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E08000037", @@ -421373,8 +421186,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000001", @@ -421385,8 +421198,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000002", @@ -421397,8 +421210,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000003", @@ -421409,8 +421222,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000004", @@ -421421,8 +421234,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000005", @@ -421433,8 +421246,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000006", @@ -421445,8 +421258,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000007", @@ -421457,8 +421270,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000008", @@ -421469,8 +421282,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000009", @@ -421481,8 +421294,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000010", @@ -421493,8 +421306,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000011", @@ -421505,8 +421318,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000012", @@ -421517,8 +421330,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000013", @@ -421529,8 +421342,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000014", @@ -421541,8 +421354,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000015", @@ -421553,8 +421366,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000016", @@ -421565,8 +421378,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000017", @@ -421577,8 +421390,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000018", @@ -421589,8 +421402,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000019", @@ -421601,8 +421414,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000020", @@ -421613,8 +421426,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000021", @@ -421625,8 +421438,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000022", @@ -421637,8 +421450,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000023", @@ -421649,8 +421462,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000024", @@ -421661,8 +421474,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000025", @@ -421673,8 +421486,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000026", @@ -421685,8 +421498,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000027", @@ -421697,8 +421510,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000028", @@ -421709,8 +421522,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000029", @@ -421721,8 +421534,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000030", @@ -421733,8 +421546,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000031", @@ -421745,8 +421558,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000032", @@ -421757,8 +421570,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@E09000033", @@ -421769,8 +421582,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000001", @@ -421781,8 +421594,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000002", @@ -421793,8 +421606,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000003", @@ -421805,8 +421618,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000004", @@ -421817,8 +421630,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000005", @@ -421829,8 +421642,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000006", @@ -421841,8 +421654,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000007", @@ -421853,8 +421666,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000008", @@ -421865,8 +421678,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000009", @@ -421877,8 +421690,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000010", @@ -421889,8 +421702,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@N09000011", @@ -421901,8 +421714,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000005", @@ -421913,8 +421726,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000006", @@ -421925,8 +421738,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000008", @@ -421937,8 +421750,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000010", @@ -421949,8 +421762,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000011", @@ -421961,8 +421774,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000013", @@ -421973,8 +421786,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000014", @@ -421985,8 +421798,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000017", @@ -421997,8 +421810,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000018", @@ -422009,8 +421822,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000019", @@ -422021,8 +421834,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000020", @@ -422033,8 +421846,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000021", @@ -422045,8 +421858,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000023", @@ -422057,8 +421870,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000026", @@ -422069,8 +421882,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000027", @@ -422081,8 +421894,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000028", @@ -422093,8 +421906,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000029", @@ -422105,8 +421918,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000030", @@ -422117,8 +421930,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000033", @@ -422129,8 +421942,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000034", @@ -422141,8 +421954,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000035", @@ -422153,8 +421966,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000036", @@ -422165,8 +421978,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000038", @@ -422177,8 +421990,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000039", @@ -422189,8 +422002,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000040", @@ -422201,8 +422014,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000041", @@ -422213,8 +422026,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000042", @@ -422225,8 +422038,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000045", @@ -422237,8 +422050,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000047", @@ -422249,8 +422062,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000048", @@ -422261,8 +422074,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000049", @@ -422273,8 +422086,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@S12000050", @@ -422285,8 +422098,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000001", @@ -422297,8 +422110,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000002", @@ -422309,8 +422122,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000003", @@ -422321,8 +422134,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000004", @@ -422333,8 +422146,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000005", @@ -422345,8 +422158,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000006", @@ -422357,8 +422170,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000008", @@ -422369,8 +422182,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000009", @@ -422381,8 +422194,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000010", @@ -422393,8 +422206,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000011", @@ -422405,8 +422218,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000012", @@ -422417,8 +422230,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000013", @@ -422429,8 +422242,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000014", @@ -422441,8 +422254,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000015", @@ -422453,8 +422266,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000016", @@ -422465,8 +422278,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000018", @@ -422477,8 +422290,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000019", @@ -422489,8 +422302,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000020", @@ -422501,8 +422314,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000021", @@ -422513,8 +422326,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000022", @@ -422525,8 +422338,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000023", @@ -422537,8 +422350,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_net_income_ahc@W06000024", @@ -422549,8 +422362,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." } ] } @@ -422572,8 +422385,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000002", @@ -422584,8 +422397,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000003", @@ -422596,8 +422409,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000004", @@ -422608,8 +422421,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000005", @@ -422620,8 +422433,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000006", @@ -422632,8 +422445,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000007", @@ -422644,8 +422457,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000008", @@ -422656,8 +422469,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000009", @@ -422668,8 +422481,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000010", @@ -422680,8 +422493,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000011", @@ -422692,8 +422505,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000012", @@ -422704,8 +422517,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000013", @@ -422716,8 +422529,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000014", @@ -422728,8 +422541,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000015", @@ -422740,8 +422553,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000016", @@ -422752,8 +422565,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000017", @@ -422764,8 +422577,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000018", @@ -422776,8 +422589,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000019", @@ -422788,8 +422601,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000020", @@ -422800,8 +422613,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000021", @@ -422812,8 +422625,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000022", @@ -422824,8 +422637,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000023", @@ -422836,8 +422649,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000024", @@ -422848,8 +422661,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000025", @@ -422860,8 +422673,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000026", @@ -422872,8 +422685,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000027", @@ -422884,8 +422697,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000030", @@ -422896,8 +422709,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000031", @@ -422908,8 +422721,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000032", @@ -422920,8 +422733,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000033", @@ -422932,8 +422745,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000034", @@ -422944,8 +422757,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000035", @@ -422956,8 +422769,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000036", @@ -422968,8 +422781,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000037", @@ -422980,8 +422793,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000038", @@ -422992,8 +422805,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000039", @@ -423004,8 +422817,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000040", @@ -423016,8 +422829,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000041", @@ -423028,8 +422841,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000042", @@ -423040,8 +422853,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000043", @@ -423052,8 +422865,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000044", @@ -423064,8 +422877,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000045", @@ -423076,8 +422889,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000046", @@ -423088,8 +422901,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000047", @@ -423100,8 +422913,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000049", @@ -423112,8 +422925,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000050", @@ -423124,8 +422937,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000051", @@ -423136,8 +422949,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000052", @@ -423148,8 +422961,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000053", @@ -423160,8 +422973,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000054", @@ -423172,8 +422985,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000055", @@ -423184,8 +422997,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000056", @@ -423196,8 +423009,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000057", @@ -423208,8 +423021,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000058", @@ -423220,8 +423033,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000059", @@ -423232,8 +423045,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000060", @@ -423244,8 +423057,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000061", @@ -423256,8 +423069,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000062", @@ -423268,8 +423081,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000063", @@ -423280,8 +423093,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000064", @@ -423292,8 +423105,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000065", @@ -423304,8 +423117,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E06000066", @@ -423316,8 +423129,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000008", @@ -423328,8 +423141,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000009", @@ -423340,8 +423153,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000010", @@ -423352,8 +423165,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000011", @@ -423364,8 +423177,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000012", @@ -423376,8 +423189,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000032", @@ -423388,8 +423201,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000033", @@ -423400,8 +423213,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000034", @@ -423412,8 +423225,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000035", @@ -423424,8 +423237,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000036", @@ -423436,8 +423249,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000037", @@ -423448,8 +423261,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000038", @@ -423460,8 +423273,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000039", @@ -423472,8 +423285,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000040", @@ -423484,8 +423297,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000041", @@ -423496,8 +423309,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000042", @@ -423508,8 +423321,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000043", @@ -423520,8 +423333,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000044", @@ -423532,8 +423345,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000045", @@ -423544,8 +423357,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000046", @@ -423556,8 +423369,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000047", @@ -423568,8 +423381,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000061", @@ -423580,8 +423393,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000062", @@ -423592,8 +423405,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000063", @@ -423604,8 +423417,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000064", @@ -423616,8 +423429,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000065", @@ -423628,8 +423441,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000066", @@ -423640,8 +423453,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000067", @@ -423652,8 +423465,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000068", @@ -423664,8 +423477,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000069", @@ -423676,8 +423489,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000070", @@ -423688,8 +423501,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000071", @@ -423700,8 +423513,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000072", @@ -423712,8 +423525,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000073", @@ -423724,8 +423537,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000074", @@ -423736,8 +423549,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000075", @@ -423748,8 +423561,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000076", @@ -423760,8 +423573,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000077", @@ -423772,8 +423585,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000078", @@ -423784,8 +423597,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000079", @@ -423796,8 +423609,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000080", @@ -423808,8 +423621,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000081", @@ -423820,8 +423633,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000082", @@ -423832,8 +423645,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000083", @@ -423844,8 +423657,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000084", @@ -423856,8 +423669,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000085", @@ -423868,8 +423681,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000086", @@ -423880,8 +423693,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000087", @@ -423892,8 +423705,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000088", @@ -423904,8 +423717,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000089", @@ -423916,8 +423729,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000090", @@ -423928,8 +423741,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000091", @@ -423940,8 +423753,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000092", @@ -423952,8 +423765,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000093", @@ -423964,8 +423777,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000094", @@ -423976,8 +423789,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000095", @@ -423988,8 +423801,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000096", @@ -424000,8 +423813,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000098", @@ -424012,8 +423825,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000099", @@ -424024,8 +423837,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000102", @@ -424036,8 +423849,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000103", @@ -424048,8 +423861,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000105", @@ -424060,8 +423873,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000106", @@ -424072,8 +423885,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000107", @@ -424084,8 +423897,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000108", @@ -424096,8 +423909,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000109", @@ -424108,8 +423921,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000110", @@ -424120,8 +423933,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000111", @@ -424132,8 +423945,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000112", @@ -424144,8 +423957,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000113", @@ -424156,8 +423969,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000114", @@ -424168,8 +423981,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000115", @@ -424180,8 +423993,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000116", @@ -424192,8 +424005,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000117", @@ -424204,8 +424017,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000118", @@ -424216,8 +424029,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000119", @@ -424228,8 +424041,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000120", @@ -424240,8 +424053,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000121", @@ -424252,8 +424065,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000122", @@ -424264,8 +424077,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000123", @@ -424276,8 +424089,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000124", @@ -424288,8 +424101,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000125", @@ -424300,8 +424113,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000126", @@ -424312,8 +424125,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000127", @@ -424324,8 +424137,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000128", @@ -424336,8 +424149,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000129", @@ -424348,8 +424161,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000130", @@ -424360,8 +424173,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000131", @@ -424372,8 +424185,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000132", @@ -424384,8 +424197,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000133", @@ -424396,8 +424209,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000134", @@ -424408,8 +424221,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000135", @@ -424420,8 +424233,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000136", @@ -424432,8 +424245,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000137", @@ -424444,8 +424257,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000138", @@ -424456,8 +424269,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000139", @@ -424468,8 +424281,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000140", @@ -424480,8 +424293,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000141", @@ -424492,8 +424305,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000142", @@ -424504,8 +424317,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000143", @@ -424516,8 +424329,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000144", @@ -424528,8 +424341,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000145", @@ -424540,8 +424353,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000146", @@ -424552,8 +424365,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000147", @@ -424564,8 +424377,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000148", @@ -424576,8 +424389,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000149", @@ -424588,8 +424401,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000170", @@ -424600,8 +424413,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000171", @@ -424612,8 +424425,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000172", @@ -424624,8 +424437,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000173", @@ -424636,8 +424449,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000174", @@ -424648,8 +424461,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000175", @@ -424660,8 +424473,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000176", @@ -424672,8 +424485,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000177", @@ -424684,8 +424497,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000178", @@ -424696,8 +424509,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000179", @@ -424708,8 +424521,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000180", @@ -424720,8 +424533,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000181", @@ -424732,8 +424545,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000192", @@ -424744,8 +424557,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000193", @@ -424756,8 +424569,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000194", @@ -424768,8 +424581,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000195", @@ -424780,8 +424593,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000196", @@ -424792,8 +424605,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000197", @@ -424804,8 +424617,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000198", @@ -424816,8 +424629,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000199", @@ -424828,8 +424641,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000200", @@ -424840,8 +424653,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000202", @@ -424852,8 +424665,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000203", @@ -424864,8 +424677,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000207", @@ -424876,8 +424689,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000208", @@ -424888,8 +424701,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000209", @@ -424900,8 +424713,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000210", @@ -424912,8 +424725,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000211", @@ -424924,8 +424737,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000212", @@ -424936,8 +424749,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000213", @@ -424948,8 +424761,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000214", @@ -424960,8 +424773,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000215", @@ -424972,8 +424785,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000216", @@ -424984,8 +424797,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000217", @@ -424996,8 +424809,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000218", @@ -425008,8 +424821,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000219", @@ -425020,8 +424833,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000220", @@ -425032,8 +424845,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000221", @@ -425044,8 +424857,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000222", @@ -425056,8 +424869,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000223", @@ -425068,8 +424881,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000224", @@ -425080,8 +424893,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000225", @@ -425092,8 +424905,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000226", @@ -425104,8 +424917,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000227", @@ -425116,8 +424929,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000228", @@ -425128,8 +424941,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000229", @@ -425140,8 +424953,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000234", @@ -425152,8 +424965,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000235", @@ -425164,8 +424977,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000236", @@ -425176,8 +424989,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000237", @@ -425188,8 +425001,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000238", @@ -425200,8 +425013,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000239", @@ -425212,8 +425025,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000240", @@ -425224,8 +425037,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000241", @@ -425236,8 +425049,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000242", @@ -425248,8 +425061,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000243", @@ -425260,8 +425073,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000244", @@ -425272,8 +425085,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E07000245", @@ -425284,8 +425097,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000001", @@ -425296,8 +425109,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000002", @@ -425308,8 +425121,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000003", @@ -425320,8 +425133,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000004", @@ -425332,8 +425145,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000005", @@ -425344,8 +425157,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000006", @@ -425356,8 +425169,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000007", @@ -425368,8 +425181,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000008", @@ -425380,8 +425193,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000009", @@ -425392,8 +425205,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000010", @@ -425404,8 +425217,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000011", @@ -425416,8 +425229,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000012", @@ -425428,8 +425241,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000013", @@ -425440,8 +425253,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000014", @@ -425452,8 +425265,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000015", @@ -425464,8 +425277,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000016", @@ -425476,8 +425289,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000017", @@ -425488,8 +425301,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000018", @@ -425500,8 +425313,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000019", @@ -425512,8 +425325,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000021", @@ -425524,8 +425337,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000022", @@ -425536,8 +425349,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000023", @@ -425548,8 +425361,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000024", @@ -425560,8 +425373,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000025", @@ -425572,8 +425385,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000026", @@ -425584,8 +425397,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000027", @@ -425596,8 +425409,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000028", @@ -425608,8 +425421,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000029", @@ -425620,8 +425433,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000030", @@ -425632,8 +425445,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000031", @@ -425644,8 +425457,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000032", @@ -425656,8 +425469,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000033", @@ -425668,8 +425481,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000034", @@ -425680,8 +425493,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000035", @@ -425692,8 +425505,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000036", @@ -425704,8 +425517,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E08000037", @@ -425716,8 +425529,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000001", @@ -425728,8 +425541,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000002", @@ -425740,8 +425553,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000003", @@ -425752,8 +425565,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000004", @@ -425764,8 +425577,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000005", @@ -425776,8 +425589,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000006", @@ -425788,8 +425601,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000007", @@ -425800,8 +425613,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000008", @@ -425812,8 +425625,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000009", @@ -425824,8 +425637,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000010", @@ -425836,8 +425649,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000011", @@ -425848,8 +425661,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000012", @@ -425860,8 +425673,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000013", @@ -425872,8 +425685,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000014", @@ -425884,8 +425697,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000015", @@ -425896,8 +425709,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000016", @@ -425908,8 +425721,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000017", @@ -425920,8 +425733,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000018", @@ -425932,8 +425745,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000019", @@ -425944,8 +425757,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000020", @@ -425956,8 +425769,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000021", @@ -425968,8 +425781,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000022", @@ -425980,8 +425793,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000023", @@ -425992,8 +425805,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000024", @@ -426004,8 +425817,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000025", @@ -426016,8 +425829,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000026", @@ -426028,8 +425841,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000027", @@ -426040,8 +425853,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000028", @@ -426052,8 +425865,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000029", @@ -426064,8 +425877,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000030", @@ -426076,8 +425889,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000031", @@ -426088,8 +425901,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000032", @@ -426100,8 +425913,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@E09000033", @@ -426112,8 +425925,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000001", @@ -426124,8 +425937,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000002", @@ -426136,8 +425949,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000003", @@ -426148,8 +425961,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000004", @@ -426160,8 +425973,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000005", @@ -426172,8 +425985,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000006", @@ -426184,8 +425997,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000007", @@ -426196,8 +426009,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000008", @@ -426208,8 +426021,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000009", @@ -426220,8 +426033,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000010", @@ -426232,8 +426045,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@N09000011", @@ -426244,8 +426057,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000005", @@ -426256,8 +426069,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000006", @@ -426268,8 +426081,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000008", @@ -426280,8 +426093,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000010", @@ -426292,8 +426105,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000011", @@ -426304,8 +426117,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000013", @@ -426316,8 +426129,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000014", @@ -426328,8 +426141,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000017", @@ -426340,8 +426153,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000018", @@ -426352,8 +426165,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000019", @@ -426364,8 +426177,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000020", @@ -426376,8 +426189,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000021", @@ -426388,8 +426201,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000023", @@ -426400,8 +426213,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000026", @@ -426412,8 +426225,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000027", @@ -426424,8 +426237,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000028", @@ -426436,8 +426249,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000029", @@ -426448,8 +426261,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000030", @@ -426460,8 +426273,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000033", @@ -426472,8 +426285,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000034", @@ -426484,8 +426297,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000035", @@ -426496,8 +426309,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000036", @@ -426508,8 +426321,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000038", @@ -426520,8 +426333,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000039", @@ -426532,8 +426345,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000040", @@ -426544,8 +426357,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000041", @@ -426556,8 +426369,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000042", @@ -426568,8 +426381,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000045", @@ -426580,8 +426393,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000047", @@ -426592,8 +426405,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000048", @@ -426604,8 +426417,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000049", @@ -426616,8 +426429,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@S12000050", @@ -426628,8 +426441,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000001", @@ -426640,8 +426453,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000002", @@ -426652,8 +426465,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000003", @@ -426664,8 +426477,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000004", @@ -426676,8 +426489,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000005", @@ -426688,8 +426501,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000006", @@ -426700,8 +426513,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000008", @@ -426712,8 +426525,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000009", @@ -426724,8 +426537,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000010", @@ -426736,8 +426549,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000011", @@ -426748,8 +426561,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000012", @@ -426760,8 +426573,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000013", @@ -426772,8 +426585,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000014", @@ -426784,8 +426597,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000015", @@ -426796,8 +426609,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000016", @@ -426808,8 +426621,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000018", @@ -426820,8 +426633,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000019", @@ -426832,8 +426645,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000020", @@ -426844,8 +426657,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000021", @@ -426856,8 +426669,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000022", @@ -426868,8 +426681,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000023", @@ -426880,8 +426693,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." }, { "name": "ons.equiv_housing_costs@W06000024", @@ -426892,8 +426705,8 @@ "matched_fact_count_overall": 0, "matched_fact_count_at_or_before_period": 0, "error": "ledger_reference_compile_status_no_fact_for_area", - "signed_reason_id": "msoa_mean_to_la_deferred", - "signed_rationale": "ONS equivalised-income facts in the pinned feed are MSOA-grain mean-valued targets, with no local-authority rows; local-authority aggregation is deferred pending the signed mean-aggregation design." + "signed_reason_id": "frs_model_based_circularity", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a)." } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json index 9d89132b07..3c42151517 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json @@ -1,12 +1,11 @@ { "source_fact_feed": "chronicle-uk-53815b2-consumer-facts", "target_period": 2025, - "candidate_count": 1437, - "contract_target_count": 394, - "active_reference_count": 1403, + "candidate_count": 1439, + "contract_target_count": 396, + "active_reference_count": 1409, "status_counts": { - "active": 1403, - "no_fact_at_or_before_period": 4, + "active": 1409, "signed_excluded": 30 }, "geography_pins": { @@ -60,15 +59,15 @@ }, "obr.council_tax_england": { "geography_level": "country", - "geography_id": "E92000001" + "geography_id": "K02000001" }, "obr.council_tax_scotland": { "geography_level": "country", - "geography_id": "S92000003" + "geography_id": "K02000001" }, "obr.council_tax_wales": { "geography_level": "country", - "geography_id": "W92000004" + "geography_id": "K02000001" }, "obr.domestic_rates": { "geography_level": "country", @@ -1936,9 +1935,17 @@ "geography_level": "country", "geography_id": "K02000001" }, - "slc.repayments.devolved_total": { + "slc.repayments.wales_total": { "geography_level": "country", - "geography_id": "K03000001" + "geography_id": "W92000004" + }, + "slc.repayments.scotland_total": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "slc.repayments.northern_ireland_total": { + "geography_level": "country", + "geography_id": "N92000002" }, "slc.repayments.england_total_higher_education": { "geography_level": "country", @@ -4643,7 +4650,6 @@ }, "genuine_sum_residue": [ "dfe.funded_childcare.working_parent_children_2_to_4", - "dfi_ni.bus.passenger_receipts", "dwp.workplace_pension.employer_contributions", "nithc.public_transport_support", "obr.beer_and_cider_duties", @@ -4817,10 +4823,6 @@ "ons.population.scotland_children_under_16", "ons.population.uk_total", "ons.savings_interest_income", - "slc.repayments.england_plan_1", - "slc.repayments.england_plan_2", - "slc.repayments.england_plan_5", - "slc.repayments.england_total_higher_education", "welshgov.bus.public_support" ], "uprating_holds": [ @@ -5347,7 +5349,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "26000000.0" }, { @@ -5355,7 +5357,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "339000000.0" }, { @@ -5363,7 +5365,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "500000000.0" }, { @@ -5371,7 +5373,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "647000000.0" }, { @@ -5379,7 +5381,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "780000000.0" }, { @@ -5387,7 +5389,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "82000000.0" }, { @@ -5395,7 +5397,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "2540000000.0" }, { @@ -5403,7 +5405,7 @@ "from": "2023", "to": "2025", "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "3470000000.0" }, { @@ -5411,7 +5413,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "6870000000.0" }, { @@ -5419,7 +5421,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "11100000000.0" }, { @@ -5427,7 +5429,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "175000000.0" }, { @@ -5435,7 +5437,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "855000000.0" }, { @@ -5443,7 +5445,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3450000000.0" }, { @@ -5451,7 +5453,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3330000000.0" }, { @@ -5459,7 +5461,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3700000000.0" }, { @@ -5467,7 +5469,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "4700000000.0" }, { @@ -5475,7 +5477,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3430000000.0" }, { @@ -5483,7 +5485,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "8400000000.0" }, { @@ -5491,7 +5493,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "12500000000.0" }, { @@ -5499,7 +5501,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3820000000.0" }, { @@ -5507,7 +5509,7 @@ "from": "2023", "to": "2025", "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "9440000000.0" }, { @@ -7298,6 +7300,21 @@ "from": "2025-09", "to": "2025" }, + { + "name": "slc.repayments.wales_total", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.scotland_total", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.northern_ireland_total", + "from": "2024", + "to": "2025" + }, { "name": "slc.borrowers.plan_2_above_threshold", "from": "2024", @@ -7348,46 +7365,6 @@ "from": "2024", "to": "2025" }, - { - "name": "dfe.funded_childcare.working_parent_children_2_to_4", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.early_learning_2_year_olds", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.universal_only_children", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.working_parent_children_9_to_11_months", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.working_parent_children_age_1", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.working_parent_children_age_2", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.working_parent_children_age_3", - "from": "2025-01", - "to": "2025" - }, - { - "name": "dfe.funded_childcare.universal_nursery_children_age_3", - "from": "2025-01", - "to": "2025" - }, { "name": "dft.bus_fare_receipts.england", "from": "2024", @@ -11526,45 +11503,54 @@ "matched_fact_count_overall": 14, "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 48774253146.51462, + "resolved_value": 47197225993.12901, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_bd6caaecbca3ab1bebe5d2d8" } ] }, "obr.council_tax_england": { - "status": "no_fact_at_or_before_period", + "status": "active", "candidates": [ { "name": "obr.council_tax_england", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "status": "active", + "matched_fact_count_overall": 14, + "matched_fact_count_at_or_before_period": 3, + "resolved_period": 2025, + "resolved_value": 43393548211.03646, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_198ca997d4ddfd2aaca01f99" } ] }, "obr.council_tax_scotland": { - "status": "no_fact_at_or_before_period", + "status": "active", "candidates": [ { "name": "obr.council_tax_scotland", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "status": "active", + "matched_fact_count_overall": 14, + "matched_fact_count_at_or_before_period": 3, + "resolved_period": 2025, + "resolved_value": 3023016871.201955, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_699522ac3c064cf3770cda90" } ] }, "obr.council_tax_wales": { - "status": "no_fact_at_or_before_period", + "status": "active", "candidates": [ { "name": "obr.council_tax_wales", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "status": "active", + "matched_fact_count_overall": 14, + "matched_fact_count_at_or_before_period": 3, + "resolved_period": 2025, + "resolved_value": 2357688064.2762027, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d5e6ed73de3f7fd5c44dd9ef" } ] }, @@ -12839,12 +12825,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 29058251.016552746, + "resolved_value": 28899522.63739463, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_5aff5e57f05ddba9ad025b36", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "26000000.0" } }, @@ -12854,12 +12840,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 378874888.2542839, + "resolved_value": 376805314.3875684, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_fc3c7927013f5264698979d8", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "339000000.0" } }, @@ -12902,12 +12888,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 558812519.5490913, + "resolved_value": 555760050.7191275, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_6b85f6be706ccfed238bf1f9", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "500000000.0" } }, @@ -12928,12 +12914,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 723103400.2965242, + "resolved_value": 719153505.630551, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_5852a008bcd3cea2bc99b092", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "647000000.0" } }, @@ -12954,12 +12940,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 871747530.4965824, + "resolved_value": 866985679.1218389, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_2d34b4d9693e393903c5f638", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "780000000.0" } }, @@ -12969,12 +12955,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 91645253.20605098, + "resolved_value": 91144648.31793691, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_e493ddc5770b5a2e89c83fcf", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "82000000.0" } }, @@ -12984,12 +12970,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2838767599.309384, + "resolved_value": 2823261057.6531677, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_ae77cfe6ff63112b006c6a30", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "2540000000.0" } }, @@ -13010,12 +12996,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3878158885.6706934, + "resolved_value": 3856974751.9907446, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_91323471e9baa2fc4904040a", "uprating": { "index": "hmrc.itl_2026.taxpayer_count_growth_all_bands_times_obr_per_capita_mixed_income", - "factor": "1.11762503909818", + "factor": "1.11152010143825", "value_before_uprating": "3470000000.0" } } @@ -13030,12 +13016,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7475572768.250349, + "resolved_value": 7475600207.41509, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_6fd01f132dc6b218c02326b1", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "6870000000.0" } }, @@ -13045,12 +13031,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12078436350.448162, + "resolved_value": 12078480684.469795, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_3c0cd54a0f0609d8ebc58a25", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "11100000000.0" } }, @@ -13060,12 +13046,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 190425798.31787643, + "resolved_value": 190426497.27767697, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_b63a84056f85bed14b8ab8fd", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "175000000.0" } }, @@ -13075,12 +13061,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 930366043.2101963, + "resolved_value": 930369458.1280789, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_3c4f22fc63944665033b18b3", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "855000000.0" } }, @@ -13090,12 +13076,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3754108595.409564, + "resolved_value": 3754122374.9027743, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_ced1a5840ced099b471d4e84", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3450000000.0" } }, @@ -13105,12 +13091,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3623530905.1344485, + "resolved_value": 3623544205.340939, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_8a115e840b38a6603d618bc0", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3330000000.0" } }, @@ -13120,12 +13106,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4026145450.1493874, + "resolved_value": 4026160228.1565986, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_0394e55216df7f3dcab84fb5", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3700000000.0" } }, @@ -13135,12 +13121,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5114292869.108682, + "resolved_value": 5114311641.171896, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_ea93d59adaf66ef73e9dddbf", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "4700000000.0" } }, @@ -13150,12 +13136,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3732345647.030378, + "resolved_value": 3732359346.6424685, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_8d09d2287cbdb2e4f4004521", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3430000000.0" } }, @@ -13165,12 +13151,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 9140438319.258068, + "resolved_value": 9140471869.328495, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_0a4329a3eb027a530c6f02ec", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "8400000000.0" } }, @@ -13180,12 +13166,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 13601842736.991173, + "resolved_value": 13601892662.691212, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_c11497ffe45250b909593f1d", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "12500000000.0" } }, @@ -13195,12 +13181,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4156723140.424503, + "resolved_value": 4156738397.7184343, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_dafc8ca1cd03e5d461b11d4e", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "3820000000.0" } }, @@ -13210,12 +13196,12 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 10272111634.975735, + "resolved_value": 10272149338.864403, "resolved_fact_period": "2023", "resolved_fact_key": "ledger_aggregate_fact_v2_940e6ce9db10080ed5613faa", "uprating": { "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.per_capita.gdp", - "factor": "1.08814741895929", + "factor": "1.0881514130153", "value_before_uprating": "9440000000.0" } } @@ -18351,7 +18337,7 @@ "status": "signed_excluded", "matched_fact_count_overall": 828, "matched_fact_count_at_or_before_period": 828, - "signed_rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration." + "signed_rationale": "Kept out: Chronicle's Scotland household-composition cut counts couple households only, so binding it would fix part of the group and leave lone parents free, and the current selector reaches person-level ONS mid-year population age rows, not households with three or more children (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D3)." } ] }, @@ -19976,7 +19962,7 @@ "matched_fact_count_overall": 3, "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 471000000.0, + "resolved_value": 467200000.0, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_20b43b0f8f61e448f28895cf" } @@ -20058,15 +20044,48 @@ } ] }, - "slc.repayments.devolved_total": { - "status": "no_fact_at_or_before_period", + "slc.repayments.wales_total": { + "status": "active", "candidates": [ { - "name": "slc.repayments.devolved_total", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "name": "slc.repayments.wales_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 229100000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_902404b7cd21f97c3b21e20d" + } + ] + }, + "slc.repayments.scotland_total": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.scotland_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 203300000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_4ec55a09c394534ac26767f8" + } + ] + }, + "slc.repayments.northern_ireland_total": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.northern_ireland_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 181700000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c3e545a934c9cf0ca1b03202" } ] }, @@ -20079,7 +20098,7 @@ "matched_fact_count_overall": 2, "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 5339303976.37, + "resolved_value": 5259035941.014999, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_f0246325a330628012ee76e8" } @@ -20094,7 +20113,7 @@ "matched_fact_count_overall": 2, "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 1604190700.89, + "resolved_value": 1666317820.305, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_a53459aedc5b84595b83c3c8" } @@ -20109,9 +20128,9 @@ "matched_fact_count_overall": 4, "matched_fact_count_at_or_before_period": 4, "resolved_period": 2025, - "resolved_value": 3234379913.2999997, + "resolved_value": 3120348275.3849993, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_b93d57062e37c3331c56e26c" + "resolved_fact_key": "ledger_aggregate_fact_v2_a2024c03e027506e656e205c" } ] }, @@ -20124,9 +20143,9 @@ "matched_fact_count_overall": 4, "matched_fact_count_at_or_before_period": 4, "resolved_period": 2025, - "resolved_value": 73713378.39, + "resolved_value": 65502428.995000005, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_d9fcbf3e10321a3659d441d2" + "resolved_fact_key": "ledger_aggregate_fact_v2_85bfbd8b99bbea58b076edb6" } ] }, @@ -20305,7 +20324,7 @@ "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 599800000.0, + "resolved_value": 607900000.0, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_988715985f9e98bbb332e83d" } @@ -20333,11 +20352,11 @@ "name": "dfe.funded_childcare.working_parent_children_2_to_4", "status": "active", "matched_fact_count_overall": 11, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_at_or_before_period": 11, "resolved_period": 2025, - "resolved_value": 621482.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_a57a0c03ac43b62dde04fabd" + "resolved_value": 648979.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_af12a063a16ecde500686c6c" } ] }, @@ -20348,11 +20367,11 @@ "name": "dfe.funded_childcare.early_learning_2_year_olds", "status": "active", "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 11, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 95031.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_a2b30af28303935159ba0edc" + "resolved_value": 85629.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_9e913211537e7c46e96c2742" } ] }, @@ -20363,11 +20382,11 @@ "name": "dfe.funded_childcare.universal_only_children", "status": "active", "matched_fact_count_overall": 770, - "matched_fact_count_at_or_before_period": 686, + "matched_fact_count_at_or_before_period": 770, "resolved_period": 2025, - "resolved_value": 396965.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_471573def13ebdc67ff1f40a" + "resolved_value": 362581.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_ae45cc61b01eddce4b934a86" } ] }, @@ -20378,11 +20397,11 @@ "name": "dfe.funded_childcare.working_parent_children_9_to_11_months", "status": "active", "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 29155.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_769651ffaa02515e5ee3098b" + "resolved_value": 30679.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_5c1273ee61b11f237ed6e181" } ] }, @@ -20393,11 +20412,11 @@ "name": "dfe.funded_childcare.working_parent_children_age_1", "status": "active", "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 195104.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_6cbcc48c50d98484b296c765" + "resolved_value": 210825.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_e05ce3c6b38a635c203cdc25" } ] }, @@ -20408,11 +20427,11 @@ "name": "dfe.funded_childcare.working_parent_children_age_2", "status": "active", "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 242453.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_a57a0c03ac43b62dde04fabd" + "resolved_value": 260238.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_af12a063a16ecde500686c6c" } ] }, @@ -20423,11 +20442,11 @@ "name": "dfe.funded_childcare.working_parent_children_age_3", "status": "active", "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 278640.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_ae89c21da190202937f75e8a" + "resolved_value": 278490.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_db01df247e88d2e259f7c2d6" } ] }, @@ -20438,11 +20457,11 @@ "name": "dfe.funded_childcare.universal_nursery_children_age_3", "status": "active", "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 565954.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_0c21c76c8195d04ceb47d2a2" + "resolved_value": 535209.0, + "resolved_fact_period": "2026-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_072da1462c15ac7cceab9bc9" } ] }, @@ -20960,7 +20979,7 @@ "matched_fact_count_overall": 14, "matched_fact_count_at_or_before_period": 14, "resolved_period": 2025, - "resolved_value": 152500000.0, + "resolved_value": 151900000.0, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_fb908f8be713f90f9536e6a2" } @@ -32140,7 +32159,7 @@ "family": "ons_population", "target_id": "ons.population.scotland_households_3plus_children", "status": "signed_excluded", - "signed_rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration." + "signed_rationale": "Kept out: Chronicle's Scotland household-composition cut counts couple households only, so binding it would fix part of the group and leave lone parents free, and the current selector reaches person-level ONS mid-year population age rows, not households with three or more children (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D3)." }, { "family": "dwp_state_pension", diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_references.json b/packages/microcosm-build/src/microcosm/build/uk/target_references.json index 61d31b9adc..ccd489cc8e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -495,6 +495,9 @@ "obr.carers_allowance": "obr.efo_expenditure", "obr.child_benefit": "obr.efo_expenditure", "obr.council_tax": "obr.efo_expenditure", + "obr.council_tax_england": "obr.efo_expenditure", + "obr.council_tax_scotland": "obr.efo_expenditure", + "obr.council_tax_wales": "obr.efo_expenditure", "obr.domestic_rates": "obr.efo_expenditure", "obr.esa": "obr.efo_expenditure", "obr.fuel_duties_cars": "obr.efo_receipts", @@ -623,6 +626,9 @@ "slc.repayments.england_plan_2": "slc.repayments", "slc.repayments.england_plan_5": "slc.repayments", "slc.repayments.england_total_higher_education": "slc.repayments", + "slc.repayments.northern_ireland_total": "slc.repayments", + "slc.repayments.scotland_total": "slc.repayments", + "slc.repayments.wales_total": "slc.repayments", "slc.support.adult_dependants_grant_recipients": "slc.student_support", "slc.support.adult_dependants_grant_spend": "slc.student_support", "slc.support.maintenance_loan_recipients": "slc.student_support", @@ -880,6 +886,9 @@ "obr.carers_allowance": "Carers allowance", "obr.child_benefit": "Child benefit", "obr.council_tax": "Council tax", + "obr.council_tax_england": "Council tax england", + "obr.council_tax_scotland": "Council tax scotland", + "obr.council_tax_wales": "Council tax wales", "obr.domestic_rates": "Domestic rates", "obr.esa": "Employment and Support Allowance", "obr.fuel_duties_cars": "Fuel duties from cars", @@ -1008,6 +1017,9 @@ "slc.repayments.england_plan_2": "England plan 2", "slc.repayments.england_plan_5": "England plan 5", "slc.repayments.england_total_higher_education": "England total higher education", + "slc.repayments.northern_ireland_total": "Northern Ireland", + "slc.repayments.scotland_total": "Scotland", + "slc.repayments.wales_total": "Wales", "slc.support.adult_dependants_grant_recipients": "Adult dependants grant recipients", "slc.support.adult_dependants_grant_spend": "Adult dependants grant spend", "slc.support.maintenance_loan_recipients": "Maintenance loan recipients", @@ -1298,6 +1310,93 @@ "measure_kind": "prepared_column" }, "assertion_policy": "allow_source_projection", + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] + }, + { + "name": "obr.council_tax_england", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.council_tax_england", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/council_tax_england", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.council_tax_england", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection", + "value_operation": "calendar_year_window" + }, + { + "name": "obr.council_tax_scotland", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.council_tax_scotland", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/council_tax_scotland", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.council_tax_scotland", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection", + "value_operation": "calendar_year_window" + }, + { + "name": "obr.council_tax_wales", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.council_tax_wales", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/council_tax_wales", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.council_tax_wales", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection", "value_operation": "calendar_year_window" }, { @@ -23954,7 +24053,8 @@ "contract_target_id": "scotgov.scottish_child_payment_spending", "measure_kind": "prepared_column" }, - "assertion_policy": "allow_source_projection" + "assertion_policy": "allow_source_projection", + "value_operation": "calendar_year_window" }, { "name": "ons.savings_interest_income", @@ -24064,6 +24164,69 @@ "measure_kind": "prepared_column" } }, + { + "name": "slc.repayments.wales_total", + "ledger_selector": { + "source_name": "slc", + "source_concept": "slc.student_loan_net_repayments_total", + "entity_name": "person", + "geography_id": "W92000004", + "geography_level": "country" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/wales", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.wales_total", + "measure_kind": "prepared_column", + "measurement_period": "2024" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.scotland_total", + "ledger_selector": { + "source_name": "slc", + "source_concept": "slc.student_loan_net_repayments_total", + "entity_name": "person", + "geography_id": "S92000003", + "geography_level": "country" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/scotland", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.scotland_total", + "measure_kind": "prepared_column", + "measurement_period": "2024" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.northern_ireland_total", + "ledger_selector": { + "source_name": "slc", + "source_concept": "slc.student_loan_net_repayments_total", + "entity_name": "person", + "geography_id": "N92000002", + "geography_level": "country" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/northern_ireland", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.northern_ireland_total", + "measure_kind": "prepared_column", + "measurement_period": "2024" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, { "name": "slc.repayments.england_total_higher_education", "ledger_selector": { @@ -24084,7 +24247,7 @@ "contract_target_id": "slc.repayments.england_total_higher_education", "measure_kind": "prepared_column" }, - "value_operation": "sum" + "value_operation": "calendar_year_window" }, { "name": "slc.repayments.england_plan_1", @@ -24106,7 +24269,7 @@ "contract_target_id": "slc.repayments.england_plan_1", "measure_kind": "prepared_column" }, - "value_operation": "sum" + "value_operation": "calendar_year_window" }, { "name": "slc.repayments.england_plan_2", @@ -24129,7 +24292,7 @@ "contract_target_id": "slc.repayments.england_plan_2", "measure_kind": "prepared_column" }, - "value_operation": "sum" + "value_operation": "calendar_year_window" }, { "name": "slc.repayments.england_plan_5", @@ -24152,7 +24315,7 @@ "contract_target_id": "slc.repayments.england_plan_5", "measure_kind": "prepared_column" }, - "value_operation": "sum" + "value_operation": "calendar_year_window" }, { "name": "slc.borrowers.plan_2_above_threshold", @@ -24537,7 +24700,8 @@ "contract_target_id": "hmrc.tfc.government_top_up", "measure_kind": "prepared_column", "observation_basis": "annual_flow" - } + }, + "value_operation": "calendar_year_window" }, { "name": "hmrc.tfc.children_with_used_accounts", @@ -24590,10 +24754,9 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, + "observation_period": "2026-01", "value_operation": "sum", - "expected_member_count": 2, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "expected_member_count": 2 }, { "name": "dfe.funded_childcare.early_learning_2_year_olds", @@ -24619,8 +24782,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dfe.funded_childcare.universal_only_children", @@ -24639,6 +24801,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, + "observation_period": "2026-01", "value_operation": "difference", "value_operands": [ { @@ -24659,9 +24822,7 @@ "age": "3 to 4 years" } } - ], - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + ] }, { "name": "dfe.funded_childcare.working_parent_children_9_to_11_months", @@ -24688,8 +24849,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dfe.funded_childcare.working_parent_children_age_1", @@ -24716,8 +24876,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dfe.funded_childcare.working_parent_children_age_2", @@ -24744,8 +24903,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dfe.funded_childcare.working_parent_children_age_3", @@ -24772,8 +24930,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dfe.funded_childcare.universal_nursery_children_age_3", @@ -24800,8 +24957,7 @@ "measure_kind": "prepared_column", "observation_basis": "january_stock" }, - "uprating_from_period": "2025-01", - "uprating_to_period": 2025 + "observation_period": "2026-01" }, { "name": "dft.bus_fare_receipts.england", @@ -25529,8 +25685,7 @@ "measure_kind": "prepared_column", "observation_basis": "fiscal_year_flow" }, - "value_operation": "sum", - "expected_member_count": 2 + "value_operation": "calendar_year_window" }, { "name": "nithc.public_transport_support", From 652835c1f72d092f1ce9e5ca43ee80e262df0359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 00:49:28 +0000 Subject: [PATCH 27/39] Uprate SLC's nation rows to 2025 and fit the tests to the regenerated surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI's engine-free lane failed on the regenerated surface: - R4's three SLC nation rows declared the frame's own year (measurement_period 2024) under a matched-period hold. The solve honours a declared period only at the calibration year, or at the frame's year for a value the frame stores, and student_loan_repayment is computed by the engine (#1420's period check). So the national solve would refuse slc.repayments.wales_total, the one that binds. María's ruling of 2026-10-30: carry SLC's 2024-25 outturn to 2025 by policyengine-uk's OBR average earnings index, since repayments are a share of earnings above the plan thresholds. The three rows drop the declared period and declare the index, and their matched-period hold retires. Scotland and Northern Ireland stay held out of the solve by their own signed exclusions (their plan thresholds are not modelled). - The fixture subset compile read SLC Plan 2 with 2024-25 alone, so R7's window refused it. The four Plan 2 rows (full-time and part-time, 2024-25 and 2025-26) now come verbatim from the pinned feed, and the staged-rows test pins the windowed value. - The pins follow the regenerated surface: 1,409 active references, no row without a fact, and 34 support-floor rows over 61 area entries. The national references, membership and compile-parity receipt are regenerated for the three uprated rows. Co-Authored-By: Claude Opus 5.5 --- ...ity_incumbent_2025_signed_differences.json | 28 ++++++++++++- .../build/uk/target_reference_membership.json | 42 +++++++++++++++---- .../microcosm/build/uk/target_references.json | 12 +++--- .../build/uk/uk_population_targets.json | 18 ++++---- .../microcosm/build/uk/uprating_holds.json | 15 ------- .../uk/test_uk_council_tax_targets.py | 15 ++++--- .../uk/test_uk_target_references.py | 21 +++++++--- .../uk_target_reference_feed_rows.jsonl | 6 ++- 8 files changed, 102 insertions(+), 55 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json index 81fe7ee6c5..b3a9c31fbb 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json @@ -1,11 +1,11 @@ { "compiled_count": 1409, "counts_by_kind": { - "calibration_drift": 561, + "calibration_drift": 564, "fixture_only": 42, "ledger_only": 814 }, - "difference_count": 1417, + "difference_count": 1420, "differences": [ { "fixture_value": 1608000.0, @@ -10391,6 +10391,30 @@ "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." }, + { + "fixture_value": 181700000.0, + "kind": "calibration_drift", + "ledger_value": 189185728.15345487, + "name": "slc.repayments.northern_ireland_total", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 203300000.0, + "kind": "calibration_drift", + "ledger_value": 211675611.08198887, + "name": "slc.repayments.scotland_total", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 229100000.0, + "kind": "calibration_drift", + "ledger_value": 238538526.80218223, + "name": "slc.repayments.wales_total", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, { "fixture_value": 55364917.0, "kind": "calibration_drift", diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json index 3c42151517..be45c733a1 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json @@ -7303,17 +7303,26 @@ { "name": "slc.repayments.wales_total", "from": "2024", - "to": "2025" + "to": "2025", + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "229100000.0" }, { "name": "slc.repayments.scotland_total", "from": "2024", - "to": "2025" + "to": "2025", + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "203300000.0" }, { "name": "slc.repayments.northern_ireland_total", "from": "2024", - "to": "2025" + "to": "2025", + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "181700000.0" }, { "name": "slc.borrowers.plan_2_above_threshold", @@ -20053,9 +20062,14 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 229100000.0, + "resolved_value": 238538526.80218223, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_902404b7cd21f97c3b21e20d" + "resolved_fact_key": "ledger_aggregate_fact_v2_902404b7cd21f97c3b21e20d", + "uprating": { + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "229100000.0" + } } ] }, @@ -20068,9 +20082,14 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 203300000.0, + "resolved_value": 211675611.08198887, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_4ec55a09c394534ac26767f8" + "resolved_fact_key": "ledger_aggregate_fact_v2_4ec55a09c394534ac26767f8", + "uprating": { + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "203300000.0" + } } ] }, @@ -20083,9 +20102,14 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 181700000.0, + "resolved_value": 189185728.15345487, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c3e545a934c9cf0ca1b03202" + "resolved_fact_key": "ledger_aggregate_fact_v2_c3e545a934c9cf0ca1b03202", + "uprating": { + "index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", + "factor": "1.04119828372843", + "value_before_uprating": "181700000.0" + } } ] }, diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_references.json b/packages/microcosm-build/src/microcosm/build/uk/target_references.json index ccd489cc8e..11bcd34225 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -24179,9 +24179,9 @@ "period": 2025, "metadata": { "contract_target_id": "slc.repayments.wales_total", - "measure_kind": "prepared_column", - "measurement_period": "2024" + "measure_kind": "prepared_column" }, + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", "uprating_from_period": "2024", "uprating_to_period": 2025 }, @@ -24200,9 +24200,9 @@ "period": 2025, "metadata": { "contract_target_id": "slc.repayments.scotland_total", - "measure_kind": "prepared_column", - "measurement_period": "2024" + "measure_kind": "prepared_column" }, + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", "uprating_from_period": "2024", "uprating_to_period": 2025 }, @@ -24221,9 +24221,9 @@ "period": 2025, "metadata": { "contract_target_id": "slc.repayments.northern_ireland_total", - "measure_kind": "prepared_column", - "measurement_period": "2024" + "measure_kind": "prepared_column" }, + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings", "uprating_from_period": "2024", "uprating_to_period": 2025 }, diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 57cd340da9..777fd84860 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -15047,8 +15047,7 @@ "value_variable": "student_loan_repayment", "from_entity": "person", "map_to": "household", - "notes": "SLC's net student loan repayments for Wales, financial year 2024-25, the latest published; the selector declares Wales's geography (W92000004), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", - "measurement_period": 2024, + "notes": "SLC's net student loan repayments for Wales, financial year 2024-25, the latest published; the selector declares Wales's geography (W92000004), which wins over the inferred pin (microcosm#1095 R4, R8). The 2024-25 outturn is carried to 2025 by policyengine-uk's OBR average earnings index, since repayments are a share of earnings above the plan thresholds; the solve measures an engine-computed value only at the calibration year, so the frame's own year could not be declared (María's ruling of 2026-10-30). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", "filters": [ { "variable": "country", @@ -15069,7 +15068,8 @@ "geography_id": "W92000004" }, "category_id": "slc.repayments", - "label": "Wales" + "label": "Wales", + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings" }, { "target_id": "slc.repayments.scotland_total", @@ -15094,8 +15094,7 @@ "value_variable": "student_loan_repayment", "from_entity": "person", "map_to": "household", - "notes": "SLC's net student loan repayments for Scotland, financial year 2024-25, the latest published; the selector declares Scotland's geography (S92000003), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", - "measurement_period": 2024, + "notes": "SLC's net student loan repayments for Scotland, financial year 2024-25, the latest published; the selector declares Scotland's geography (S92000003), which wins over the inferred pin (microcosm#1095 R4, R8). The 2024-25 outturn is carried to 2025 by policyengine-uk's OBR average earnings index, since repayments are a share of earnings above the plan thresholds; the solve measures an engine-computed value only at the calibration year, so the frame's own year could not be declared (María's ruling of 2026-10-30). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", "filters": [ { "variable": "country", @@ -15116,7 +15115,8 @@ "geography_id": "S92000003" }, "category_id": "slc.repayments", - "label": "Scotland" + "label": "Scotland", + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings" }, { "target_id": "slc.repayments.northern_ireland_total", @@ -15141,8 +15141,7 @@ "value_variable": "student_loan_repayment", "from_entity": "person", "map_to": "household", - "notes": "SLC's net student loan repayments for Northern Ireland, financial year 2024-25, the latest published; the selector declares Northern Ireland's geography (N92000002), which wins over the inferred pin (microcosm#1095 R4, R8). The binding measures the frame's own year (measurement_period 2024), the fact's year, under a matched-period hold (uprating_holds.json). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", - "measurement_period": 2024, + "notes": "SLC's net student loan repayments for Northern Ireland, financial year 2024-25, the latest published; the selector declares Northern Ireland's geography (N92000002), which wins over the inferred pin (microcosm#1095 R4, R8). The 2024-25 outturn is carried to 2025 by policyengine-uk's OBR average earnings index, since repayments are a share of earnings above the plan thresholds; the solve measures an engine-computed value only at the calibration year, so the frame's own year could not be declared (María's ruling of 2026-10-30). Held as a measured diagnostic (calibration_measure_exclusions.json): its borrowers repay on their own nation's plan thresholds, which this build does not model for them (plan_4_imputation is False, and policyengine-uk#2636 closed as not planned). Split from the one devolved row, which compiled no fact at the Great Britain pin (uk-data targets/compute/other.py:116-137 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3).", "filters": [ { "variable": "country", @@ -15163,7 +15162,8 @@ "geography_id": "N92000002" }, "category_id": "slc.repayments", - "label": "Northern Ireland" + "label": "Northern Ireland", + "uprating_index": "policyengine_uk_parameter:gov.economic_assumptions.indices.obr.average_earnings" }, { "target_id": "slc.repayments.england_total_higher_education", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json index e6b48f14ca..0bbdefe847 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json @@ -373,21 +373,6 @@ "status": "approved", "expires_on": "2026-12-15" }, - { - "scope": "national", - "kind": "matched_period", - "target_ids": [ - "slc.repayments.wales_total", - "slc.repayments.scotland_total", - "slc.repayments.northern_ireland_total" - ], - "reason": "SLC's net student loan repayments for Wales, Scotland and Northern Ireland, financial year 2024-25, the latest each nation publishes. Each binding declares the frame's own year (measurement_period 2024), so the outturn is measured on the year it was published for, not carried to 2025 by an index (microcosm#1095 R4).", - "tracking": "microcosm#1095", - "approved_by": "juaristi22", - "approved_on": "2026-10-29", - "status": "approved", - "expires_on": "2027-01-29" - }, { "scope": "local", "kind": "control_rescaled", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py index 9e54eb1bf0..83aad2777c 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_council_tax_targets.py @@ -481,17 +481,20 @@ def test_support_floor_deferrals_cover_the_two_authorities_remaining_cells() -> # microcosm#1207 the three DESNZ energy rows. microcosm#1095 adds the # single adult discount cells, one row for both authorities. # microcosm#1418 adds the City of London's two SPI pension income cells - # (the Isles of Scilly's are signed under the SPI coverage gap). - assert len(rows) == 51 - assert sum(len(row["area_ids"]) for row in rows) == 95 + # (the Isles of Scilly's are signed under the SPI coverage gap). A target + # scoped to Wales or Scotland has no cell at the two English authorities, + # so the nine Welsh and eight Scottish families take none (microcosm#796, + # via #1095). + assert len(rows) == 34 + assert sum(len(row["area_ids"]) for row in rows) == 61 assert { area_id: sum(area_id in row["area_ids"] for row in rows) for area_id in ("E06000053", "E09000001") - } == {"E06000053": 44, "E09000001": 51} + } == {"E06000053": 27, "E09000001": 34} assert all(row["defer_if_compiles"] is True for row in rows) # The English band-H family is wholly deferred on spine support, so it - # carries no support-floor row; the Welsh and Scottish band-H targets do - # (the two English areas are outside their scope, so the rows are inert). + # carries no support-floor row, nor do the Welsh and Scottish band-H + # targets, which have no cell at the two English areas. assert "mhclg.council_tax_stock.by_area.band_h" not in { row["target_id"] for row in rows } diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index a8dc164b3d..9181f506e6 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -122,8 +122,10 @@ # limit rows; microcosm#1301: the 30 high-value homes region cells (three # thresholds over England's regions and Wales), which the national line drops # after the compile, less the North East and Wales rows over £2m, signed out -# below the small-cell floor -ACTIVE_REFERENCE_COUNT = 1403 +# below the small-cell floor; microcosm#1095 (#1422): the three OBR council +# tax nation rows, pinned to the UK, and SLC's three nation repayment rows in +# place of the devolved total +ACTIVE_REFERENCE_COUNT = 1409 REGION_TIER_LEVEL = {code: level for level, code in UK_REGION_TIER} @@ -1114,10 +1116,11 @@ def test_uk_target_reference_membership_report_is_packaged() -> None: assert membership["target_period"] == 2025 assert membership["active_reference_count"] == ACTIVE_REFERENCE_COUNT - # obr.domestic_rates compiles once pinned to the UK (microcosm#1095). + # obr.domestic_rates compiles once pinned to the UK (microcosm#1095), and + # so do the three OBR council tax nation rows (D14e) and SLC's nation + # repayment rows (R4), so no row is left without a fact. assert membership["status_counts"] == { "active": ACTIVE_REFERENCE_COUNT, - "no_fact_at_or_before_period": 4, "signed_excluded": 30, } assert membership["genuine_sum_residue"] @@ -1453,9 +1456,15 @@ def test_uk_target_references_compile_from_real_staged_feed_rows() -> None: == "hmrc.spi.employment_income.amount_by_total_income_band" ) + # The calendar-2025 window of SLC's full-time and part-time Plan 2 net + # repayments, FY2024-25 and FY2025-26 (microcosm#1095 R7). slc_plan_2 = targets["slc.repayments.england_plan_2"] - assert slc_plan_2.value == pytest.approx(2_778_253_361.64) - assert slc_plan_2.metadata["ledger_member_fact_count"] == "2" + assert slc_plan_2.value == pytest.approx( + 0.25 * (2_683_104_312.0299997 + 95_149_049.60999998) + + 0.75 * (3_128_518_409.2699995 + 105_861_504.03) + ) + assert slc_plan_2.metadata["ledger_member_fact_count"] == "4" + assert slc_plan_2.metadata["ledger_calendar_year_window_series"] == "2" assert targets["hmrc.cgt.gains_total"].value == 119_258_000_000 assert targets["hmrc.cgt.taxpayers_total"].value == 551_000 diff --git a/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl b/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl index fe86fa27f7..8f908f2f92 100644 --- a/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl +++ b/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl @@ -1,11 +1,13 @@ {"aggregate_fact_key":"ledger.aggregate_fact.v2:1b082e386beee3c6900e9dfa","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"hmrc","canonical_concept":"hmrc.cgt_gains_total","concept_alignment_key":"ledger.concept_alignment.v2:cd804afc02f283a70c7df5d5","evidence_notes":"CGT statistics 2025 release, Table 1, year of disposal 2023 to 2024; counts in thousands, amounts GBP million. Provisional per publication notes.","evidence_url":"https://www.gov.uk/government/statistics/capital-gains-tax-statistics","relation":"source_label","source_concept":"hmrc.cgt_gains_total"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"tax_unit","role":"taxpayer"},"geography":{"id":"K02000001","level":"country","vintage":"current"},"label":"United Kingdom 2023 tax year sum hmrc cgt gains total for person [hmrc Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal Table_1_2025.ods cgt_statistics_2025]","layout":{"groupby_dimension":"hmrc.cgt_table1_line","groupby_ordinal":0,"groupby_value_id":"ty2023","groupby_value_label":"Year of disposal 2023 to 2024","measure_id":"total_gains","measure_label":"Chargeable gains, total","measure_ordinal":7,"record_set_id":"hmrc.cgt_statistics_2025.table1.ty2023","record_set_spec_hash":"b27f186424c62509e6a5e134","record_set_spec_id":"hmrc.cgt_statistics_2025.table1.ty2023.v1","source_column_id":"total_gains","source_row_id":"ty2023","table_record_kind":"total","groupby_dimension_label":"Capital Gains Tax table line"},"legacy_fact_key":"ledger.fact.v1:f492a811d673243b30a72d14","lineage":{"source_cell_keys":["ledger.source_cell.v1:e35da0de9817851d700b614f","ledger.source_cell.v1:70d71881a68af5ec3e5388b2"],"source_record_id":"hmrc.cgt_statistics_2025.table1.ty2023.ty2023.total_gains","source_row_keys":[]},"observed_measure":{"source_concept":"hmrc.cgt_gains_total","source_measure_id":"total_gains","source_name":"hmrc","source_table":"Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:76f6824292f0e8bd3edb801f","period":{"type":"tax_year","value":2023},"provenance_class":"administrative","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:6e1a2ddc3a44d696e736dc6b","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods","raw_r2_uri":"r2://ledger-raw/raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods","source_file":"Table_1_2025.ods","source_name":"hmrc","source_sha256":"95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1","source_size_bytes":10002,"source_table":"Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal","url":"https://assets.publishing.service.gov.uk/media/6878ac497ea209168636386e/Table_1_2025_Taxpayer_numbers_gains_and_tax_liabilities.ods","vintage":"cgt_statistics_2025"},"source_release_key":"ledger.source_release.v2:a6b82e1799ccd4ba57608ccd","source_series_key":"ledger.source_series.v2:de2bf2a36f1647b20877cc1a","universe_constraint_set_key":"ledger.universe_constraint_set.v2:31e69e018123fa4b604582eb","universe_constraints":{"domain":"capital_gains_tax"},"value":65937000000,"value_type":"integer","dimension_labels":{},"dimension_value_labels":{}} -{"aggregate_fact_key":"ledger.aggregate_fact.v2:5c8d18b2366a234482594297","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"slc","canonical_concept":"slc.student_loan_net_repayments_plan_2_part_time","concept_alignment_key":"ledger.concept_alignment.v2:9a74091cc27999e11145d771","evidence_notes":"Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Part-time. GBP million.","evidence_url":"https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025","relation":"source_label","source_concept":"slc.student_loan_net_repayments_plan_2_part_time"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"student_loan_borrower"},"geography":{"id":"E92000001","level":"country","vintage":"current"},"label":"England 2024 fiscal year sum slc student loan net repayments plan 2 part time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]","layout":{"groupby_dimension":"slc.repayment_plan","groupby_ordinal":0,"groupby_value_id":"net_repayments","groupby_value_label":"Net repayments posted during the financial year","measure_id":"plan_2_part_time","measure_label":"Net repayments FY2024-25, Plan 2 Part-time","measure_ordinal":2,"record_set_id":"slc.repayments_2025.table_1a.fy2024","record_set_spec_hash":"b748f6aeb2b7ad68bfb560a9","record_set_spec_id":"slc.repayments_2025.table_1a.fy2024.v1","source_column_id":"plan_2_part_time","source_row_id":"net_repayments","table_record_kind":"total","groupby_dimension_label":"Student loan repayment plan"},"legacy_fact_key":"ledger.fact.v1:8fe5511f3f5ce8b9e784ca33","lineage":{"source_cell_keys":["ledger.source_cell.v1:f0ba6c89d59a9cf501bd2dbc","ledger.source_cell.v1:9ccc3a8147eeafcb76ff76fa","ledger.source_cell.v1:446cc4b0c7a9f20af575ec37","ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"],"source_record_id":"slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_part_time","source_row_keys":[]},"observed_measure":{"source_concept":"slc.student_loan_net_repayments_plan_2_part_time","source_measure_id":"plan_2_part_time","source_name":"slc","source_table":"Student loans in England, financial year 2024-25 (corrected tables), Table 1A","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:6cba6bfe750c9a218ebb12d8","period":{"type":"fiscal_year","value":2024},"provenance_class":"administrative","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:e9436ca620799ad1d4897afd","source":{"extracted_at":"2026-08-08","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx","raw_r2_uri":"r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx","source_file":"slcsp012025_Corrected.xlsx","source_name":"slc","source_sha256":"a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac","source_size_bytes":332185,"source_table":"Student loans in England, financial year 2024-25 (corrected tables), Table 1A","url":"https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx","vintage":"slcsp01_2025_corrected"},"source_release_key":"ledger.source_release.v2:91e47f96684950159cb0210d","source_series_key":"ledger.source_series.v2:513fa8b0e1881aafe14a47bf","universe_constraint_set_key":"ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c","universe_constraints":{"domain":"student_loans"},"value":95149049.60999998,"value_type":"number","dimension_labels":{},"dimension_value_labels":{}} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:5c8d18b2366a234482594297", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_part_time", "concept_alignment_key": "ledger.concept_alignment.v2:9a74091cc27999e11145d771", "evidence_notes": "Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Part-time. GBP million.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_part_time"}, "dimension_labels": {"slc.repayment_plan": "Repayment plan"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimension_value_labels": {"slc.repayment_plan": {"net_repayments": "Net repayments posted during the financial year"}}, "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "name": "England", "vintage": "current"}, "label": "England 2024 fiscal year sum slc student loan net repayments plan 2 part time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_dimension_label": "Repayment plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_part_time", "measure_label": "Net repayments FY2024-25, Plan 2 Part-time", "measure_ordinal": 2, "record_set_id": "slc.repayments_2025.table_1a.fy2024", "record_set_spec_hash": "b748f6aeb2b7ad68bfb560a9", "record_set_spec_id": "slc.repayments_2025.table_1a.fy2024.v1", "source_column_id": "plan_2_part_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:8fe5511f3f5ce8b9e784ca33", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:f0ba6c89d59a9cf501bd2dbc", "ledger.source_cell.v1:9ccc3a8147eeafcb76ff76fa", "ledger.source_cell.v1:446cc4b0c7a9f20af575ec37", "ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"], "source_record_id": "slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_part_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_part_time", "source_measure_id": "plan_2_part_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:6cba6bfe750c9a218ebb12d8", "period": {"type": "fiscal_year", "value": 2024}, "provenance_class": "administrative", "schema_version": "chronicle.consumer_fact.v4", "semantic_fact_key": "ledger.semantic_fact.v2:e9436ca620799ad1d4897afd", "source": {"extracted_at": "2026-08-08", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "source_file": "slcsp012025_Corrected.xlsx", "source_name": "slc", "source_sha256": "a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac", "source_size_bytes": 332185, "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx", "vintage": "slcsp01_2025_corrected"}, "source_release_key": "ledger.source_release.v2:91e47f96684950159cb0210d", "source_series_key": "ledger.source_series.v2:513fa8b0e1881aafe14a47bf", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 95149049.60999998, "value_type": "number"} {"aggregate_fact_key":"ledger.aggregate_fact.v2:3288e5ed41162df13477002a","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"obr","canonical_concept":"obr.incapacity_benefits","concept_alignment_key":"ledger.concept_alignment.v2:2773bccf4d64dcc80fe96ffe","evidence_notes":"OBR EFO March 2026 detailed forecast tables, sheet 4.9, row 11 ('Incapacity benefits2'), GBP billion. Geography: a DWP line, which DWP's benefit expenditure and caseload tables (Spring 2026, Notes 1 and 3; package dwp-benefit-expenditure-caseload-spring-2026) give as Great Britain, or people resident overseas receiving United Kingdom benefits; Northern Ireland's social security is on rows of its own. The line includes Severe Disablement Allowance, which DWP gives for England and Wales only from 1 April 2020 (Notes 4); like DWP's own incapacity totals, it keeps Great Britain.","evidence_url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/","relation":"source_label","source_concept":"obr.incapacity_benefits"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"resident_population"},"geography":{"id":"K03000001","level":"country","name":"Great Britain","vintage":"current"},"label":"Great Britain 2024 fiscal year sum obr incapacity benefits for person [obr EFO March 2026 detailed forecast tables: expenditure efo_expenditure.xlsx efo_march_2026]","layout":{"groupby_dimension":"obr.efo_line","groupby_dimension_label":"EFO table line","groupby_ordinal":0,"groupby_value_id":"incapacity_benefits","groupby_value_label":"Incapacity benefits2","measure_id":"amount","measure_label":"Incapacity benefits2, FY2024-25","measure_ordinal":0,"record_set_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2024","record_set_spec_hash":"0aa6a26646da24fff787a61c","record_set_spec_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2024.v1","source_column_id":"amount","source_row_id":"incapacity_benefits","table_record_kind":"total"},"legacy_fact_key":"ledger.fact.v1:edea822590d9198ed037e9c5","lineage":{"source_cell_keys":["ledger.source_cell.v1:bfa99d340c11364c36aeabd1","ledger.source_cell.v1:ff0afa9a95541972785d4940"],"source_record_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2024.incapacity_benefits.amount","source_row_keys":[]},"observed_measure":{"source_concept":"obr.incapacity_benefits","source_measure_id":"amount","source_name":"obr","source_table":"EFO March 2026 detailed forecast tables: expenditure","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:fde1b4a671b103ebe2c4fe82","period":{"type":"fiscal_year","value":2024},"provenance_class":"model_output","schema_version":"chronicle.consumer_fact.v4","semantic_fact_key":"ledger.semantic_fact.v2:c03269a8310f74f1010541b5","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx","raw_r2_uri":"r2://ledger-raw/raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx","source_file":"efo_expenditure.xlsx","source_name":"obr","source_sha256":"700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1","source_size_bytes":236965,"source_table":"EFO March 2026 detailed forecast tables: expenditure","url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/","vintage":"efo_march_2026"},"source_release_key":"ledger.source_release.v2:5f8a36441ddcecc13c18d680","source_series_key":"ledger.source_series.v2:3583fee04a24f9bd65efd436","universe_constraint_set_key":"ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad","universe_constraints":{"domain":"public_sector_finances"},"value":12413057398.899998,"value_type":"number","dimension_labels":{"obr.efo_line":"EFO table line"},"dimension_value_labels":{"obr.efo_line":{"incapacity_benefits":"Incapacity benefits2"}}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:9b072645b7180464a89c16b2","aggregation":{"method":"sum"},"assertion":"source_projection","concept_alignment":{"authority":"obr","canonical_concept":"obr.incapacity_benefits","concept_alignment_key":"ledger.concept_alignment.v2:2773bccf4d64dcc80fe96ffe","evidence_notes":"OBR EFO March 2026 detailed forecast tables, sheet 4.9, row 11 ('Incapacity benefits2'), GBP billion. Geography: a DWP line, which DWP's benefit expenditure and caseload tables (Spring 2026, Notes 1 and 3; package dwp-benefit-expenditure-caseload-spring-2026) give as Great Britain, or people resident overseas receiving United Kingdom benefits; Northern Ireland's social security is on rows of its own. The line includes Severe Disablement Allowance, which DWP gives for England and Wales only from 1 April 2020 (Notes 4); like DWP's own incapacity totals, it keeps Great Britain.","evidence_url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/","relation":"source_label","source_concept":"obr.incapacity_benefits"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"resident_population"},"geography":{"id":"K03000001","level":"country","name":"Great Britain","vintage":"current"},"label":"Great Britain 2025 fiscal year projected sum obr incapacity benefits for person [obr EFO March 2026 detailed forecast tables: expenditure efo_expenditure.xlsx efo_march_2026]","layout":{"groupby_dimension":"obr.efo_line","groupby_dimension_label":"EFO table line","groupby_ordinal":0,"groupby_value_id":"incapacity_benefits","groupby_value_label":"Incapacity benefits2","measure_id":"amount","measure_label":"Incapacity benefits2, FY2025-26","measure_ordinal":0,"record_set_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2025","record_set_spec_hash":"9e894c5cd0a8e0db51c697b7","record_set_spec_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2025.v1","source_column_id":"amount","source_row_id":"incapacity_benefits","table_record_kind":"total"},"legacy_fact_key":"ledger.fact.v1:a04a87b9f0e49a2cadecf8e7","lineage":{"source_cell_keys":["ledger.source_cell.v1:963cb1a2191faedf0d203f65","ledger.source_cell.v1:d97cb4c94d2ec623264d1d47"],"source_record_id":"obr.efo_2026_03.expenditure.incapacity_benefits.fy2025.incapacity_benefits.amount","source_row_keys":[]},"observed_measure":{"source_concept":"obr.incapacity_benefits","source_measure_id":"amount","source_name":"obr","source_table":"EFO March 2026 detailed forecast tables: expenditure","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:fde1b4a671b103ebe2c4fe82","period":{"type":"fiscal_year","value":2025},"provenance_class":"model_output","schema_version":"chronicle.consumer_fact.v4","semantic_fact_key":"ledger.semantic_fact.v2:138510a8a221cdd5e61cdce3","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx","raw_r2_uri":"r2://ledger-raw/raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx","source_file":"efo_expenditure.xlsx","source_name":"obr","source_sha256":"700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1","source_size_bytes":236965,"source_table":"EFO March 2026 detailed forecast tables: expenditure","url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/","vintage":"efo_march_2026"},"source_release_key":"ledger.source_release.v2:5f8a36441ddcecc13c18d680","source_series_key":"ledger.source_series.v2:96fa1a8c784ce083883c5a0a","universe_constraint_set_key":"ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad","universe_constraints":{"domain":"public_sector_finances"},"value":7206287181.538654,"value_type":"number","dimension_labels":{"obr.efo_line":"EFO table line"},"dimension_value_labels":{"obr.efo_line":{"incapacity_benefits":"Incapacity benefits2"}}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:6c212695ea75be0d2a635e9b","aggregation":{"method":"sum"},"assertion":"observation","dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"resident_population"},"geography":{"id":"K02000001","level":"country","vintage":"gss_2024"},"label":"United Kingdom 2024 calendar year count ons mid year population estimate for person [ons Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2) mye24tablesuk.xlsx mid_2024]","layout":{"groupby_dimension":"age","groupby_ordinal":0,"groupby_value_id":"uk","groupby_value_label":"United Kingdom","measure_id":"population","measure_label":"Resident population","measure_ordinal":0,"record_set_id":"ons.mid2024.mye2_persons.uk.all_ages","record_set_spec_hash":"9a06d466bbbd3788640af817","record_set_spec_id":"ons.mye2_persons.uk.all_ages.v1","source_column_id":"population","source_row_id":"uk","table_record_kind":"total","groupby_dimension_label":"Age"},"legacy_fact_key":"ledger.fact.v1:9bf0a3ba5ad6117ca8e0d0ac","lineage":{"source_cell_keys":["ledger.source_cell.v1:fbc0570947c34c475532adda","ledger.source_cell.v1:26f9cdc2784a7713953551bd","ledger.source_cell.v1:e4d9207fd741f6fbdc82de4a"],"source_record_id":"ons.mid2024.mye2_persons.uk.all_ages.uk.population","source_row_keys":[]},"observed_measure":{"source_concept":"ons.mid_year_population_estimate","source_measure_id":"population","source_name":"ons","source_table":"Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2)","unit":"count"},"observed_measure_key":"ledger.observed_measure.v2:a05342302b71ceb67b12978e","period":{"type":"calendar_year","value":2024},"provenance_class":"census","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:065ea5242b0c7b9f810a9ce6","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/ons/ons-mye-2024-uk/2024/f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526/mye24tablesuk.xlsx","raw_r2_uri":"r2://ledger-raw/raw/ons/ons-mye-2024-uk/2024/f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526/mye24tablesuk.xlsx","source_file":"mye24tablesuk.xlsx","source_name":"ons","source_sha256":"f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526","source_size_bytes":1062342,"source_table":"Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2)","url":"https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/populationandmigration/populationestimates/datasets/populationestimatesforukenglandandwalesscotlandandnorthernireland/mid2024/mye24tablesuk.xlsx","vintage":"mid_2024"},"source_release_key":"ledger.source_release.v2:615ee18597cbfc9a75e7e2a5","source_series_key":"ledger.source_series.v2:9ffe2c36294084406279ceae","universe_constraint_set_key":"ledger.universe_constraint_set.v2:3171531aa949466cfcf8b77d","universe_constraints":{"domain":"resident_population"},"value":69281437,"value_type":"integer","dimension_labels":{},"dimension_value_labels":{}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:78fb64bd2e9774df4b2f2d56","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"hmrc","canonical_concept":"hmrc.cgt_taxpayers_total","concept_alignment_key":"ledger.concept_alignment.v2:256a8378726a9be1da666fec","evidence_notes":"CGT statistics 2025 release, Table 1, year of disposal 2023 to 2024; counts in thousands, amounts GBP million. Provisional per publication notes.","evidence_url":"https://www.gov.uk/government/statistics/capital-gains-tax-statistics","relation":"source_label","source_concept":"hmrc.cgt_taxpayers_total"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"taxpayer"},"geography":{"id":"K02000001","level":"country","vintage":"current"},"label":"United Kingdom 2023 tax year count hmrc cgt taxpayers total for person [hmrc Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal Table_1_2025.ods cgt_statistics_2025]","layout":{"groupby_dimension":"hmrc.cgt_table1_line","groupby_ordinal":0,"groupby_value_id":"ty2023","groupby_value_label":"Year of disposal 2023 to 2024","measure_id":"total_taxpayers","measure_label":"CGT taxpayers, total","measure_ordinal":6,"record_set_id":"hmrc.cgt_statistics_2025.table1.ty2023","record_set_spec_hash":"b27f186424c62509e6a5e134","record_set_spec_id":"hmrc.cgt_statistics_2025.table1.ty2023.v1","source_column_id":"total_taxpayers","source_row_id":"ty2023","table_record_kind":"total","groupby_dimension_label":"Capital Gains Tax table line"},"legacy_fact_key":"ledger.fact.v1:a2123c0409eb78f8d49178b9","lineage":{"source_cell_keys":["ledger.source_cell.v1:91915a94a635f08d28cdff13","ledger.source_cell.v1:8f08244c3f6f2e2f0895aa2a"],"source_record_id":"hmrc.cgt_statistics_2025.table1.ty2023.ty2023.total_taxpayers","source_row_keys":[]},"observed_measure":{"source_concept":"hmrc.cgt_taxpayers_total","source_measure_id":"total_taxpayers","source_name":"hmrc","source_table":"Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal","unit":"count"},"observed_measure_key":"ledger.observed_measure.v2:5bbe59f8c9f99ad916666bd7","period":{"type":"tax_year","value":2023},"provenance_class":"administrative","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:677e54c237d208ba6ab417d4","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods","raw_r2_uri":"r2://ledger-raw/raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods","source_file":"Table_1_2025.ods","source_name":"hmrc","source_sha256":"95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1","source_size_bytes":10002,"source_table":"Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal","url":"https://assets.publishing.service.gov.uk/media/6878ac497ea209168636386e/Table_1_2025_Taxpayer_numbers_gains_and_tax_liabilities.ods","vintage":"cgt_statistics_2025"},"source_release_key":"ledger.source_release.v2:a6b82e1799ccd4ba57608ccd","source_series_key":"ledger.source_series.v2:de2bf2a36f1647b20877cc1a","universe_constraint_set_key":"ledger.universe_constraint_set.v2:31e69e018123fa4b604582eb","universe_constraints":{"domain":"capital_gains_tax"},"value":378000,"value_type":"integer","dimension_labels":{},"dimension_value_labels":{}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:860a48172c62298ceb00c20b","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"dwp","canonical_concept":"dwp.uc_tcl_headline_households_affected","concept_alignment_key":"ledger.concept_alignment.v2:4b3cf060f4beafb7850981dd","evidence_notes":"Two-child limit data tables, April 2025, sheet 01, column: Universal Credit households affected by the Two Child Limit policy.","evidence_url":"https://www.gov.uk/government/statistics/universal-credit-claimants-statistics-on-the-two-child-limit-policy-april-2025","relation":"source_label","source_concept":"dwp.uc_tcl_headline_households_affected"},"dimension_set_key":"ledger.dimension_set.v2:9b8da5478cdd5948be3e6a0a","dimensions":{"two_child_limit_status":"affected_3plus_children"},"entity":{"name":"household","role":"uc_household"},"geography":{"id":"K03000001","level":"country","vintage":"current"},"label":"Great Britain 2025-04 month count dwp uc tcl headline households affected for household (two child limit status=affected 3plus children) [dwp Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables data-tables-two-child-limit-april-2025.ods two_child_limit_april_2025]","layout":{"groupby_dimension":"dwp.two_child_limit_status","groupby_ordinal":1,"groupby_value_id":"affected_3plus_children","groupby_value_label":"Affected UC Household (has third or subsequent child on or after 6 April 2017)","measure_id":"universal_credit_households_affected_by_the_two_","measure_label":"Universal Credit households affected by the Two Child Limit policy","measure_ordinal":0,"record_set_id":"dwp.uc_tcl.apr2025.table01","record_set_spec_hash":"e733e450c397c1447c3d56df","record_set_spec_id":"dwp.uc_tcl.apr2025.table01.v1","source_column_id":"universal_credit_households_affected_by_the_two_","source_row_id":"affected_3plus_children","table_record_kind":"detail","groupby_dimension_label":"Two-child limit status"},"legacy_fact_key":"ledger.fact.v1:8ebf86ac0792f376664242fa","lineage":{"source_cell_keys":["ledger.source_cell.v1:900e5a7f7e1f7799fa3a97fa","ledger.source_cell.v1:e9ef94d14bedd2728883275a"],"source_record_id":"dwp.uc_tcl.apr2025.table01.affected_3plus_children.universal_credit_households_affected_by_the_two_","source_row_keys":[]},"observed_measure":{"source_concept":"dwp.uc_tcl_headline_households_affected","source_measure_id":"universal_credit_households_affected_by_the_two_","source_name":"dwp","source_table":"Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables","unit":"count"},"observed_measure_key":"ledger.observed_measure.v2:c5732f2ce8999bc5b572b546","period":{"type":"month","value":"2025-04"},"provenance_class":"administrative","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:fe7efa94f40b1316b4610fb7","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/dwp/dwp-uc-two-child-limit-2025/2025/308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2/data-tables-two-child-limit-april-2025.ods","raw_r2_uri":"r2://ledger-raw/raw/dwp/dwp-uc-two-child-limit-2025/2025/308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2/data-tables-two-child-limit-april-2025.ods","source_file":"data-tables-two-child-limit-april-2025.ods","source_name":"dwp","source_sha256":"308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2","source_size_bytes":1832271,"source_table":"Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables","url":"https://assets.publishing.service.gov.uk/media/68887ad01e72aed40611b030/data-tables-universal-credit-statistics-two-child-limit-april-2025.ods","vintage":"two_child_limit_april_2025"},"source_release_key":"ledger.source_release.v2:4d88d5cfb3627165bc974784","source_series_key":"ledger.source_series.v2:345d78707b3c738004623699","universe_constraint_set_key":"ledger.universe_constraint_set.v2:9ca710fd89b5df02185acf59","universe_constraints":{"constraints":[{"operator":"==","role":"filter","value":"affected_3plus_children","variable":"two_child_limit_status"}],"domain":"universal_credit_two_child_limit"},"value":469780,"value_type":"integer","dimension_labels":{"two_child_limit_status":"Two-child limit status"},"dimension_value_labels":{"two_child_limit_status":{"affected_3plus_children":"Affected households with three or more children"}}} -{"aggregate_fact_key":"ledger.aggregate_fact.v2:882329821c90dc683aa778d8","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"slc","canonical_concept":"slc.student_loan_net_repayments_plan_2_full_time","concept_alignment_key":"ledger.concept_alignment.v2:5a6738918c70cab40798a5ed","evidence_notes":"Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Full-time. GBP million.","evidence_url":"https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025","relation":"source_label","source_concept":"slc.student_loan_net_repayments_plan_2_full_time"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"student_loan_borrower"},"geography":{"id":"E92000001","level":"country","vintage":"current"},"label":"England 2024 fiscal year sum slc student loan net repayments plan 2 full time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]","layout":{"groupby_dimension":"slc.repayment_plan","groupby_ordinal":0,"groupby_value_id":"net_repayments","groupby_value_label":"Net repayments posted during the financial year","measure_id":"plan_2_full_time","measure_label":"Net repayments FY2024-25, Plan 2 Full-time","measure_ordinal":1,"record_set_id":"slc.repayments_2025.table_1a.fy2024","record_set_spec_hash":"b748f6aeb2b7ad68bfb560a9","record_set_spec_id":"slc.repayments_2025.table_1a.fy2024.v1","source_column_id":"plan_2_full_time","source_row_id":"net_repayments","table_record_kind":"total","groupby_dimension_label":"Student loan repayment plan"},"legacy_fact_key":"ledger.fact.v1:a959c4f2a5576cd283af852a","lineage":{"source_cell_keys":["ledger.source_cell.v1:0f682109e58dfad1ad28acd6","ledger.source_cell.v1:60e6539baafd94e56648671a","ledger.source_cell.v1:446cc4b0c7a9f20af575ec37","ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"],"source_record_id":"slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_full_time","source_row_keys":[]},"observed_measure":{"source_concept":"slc.student_loan_net_repayments_plan_2_full_time","source_measure_id":"plan_2_full_time","source_name":"slc","source_table":"Student loans in England, financial year 2024-25 (corrected tables), Table 1A","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:ea46f749cb24645a1742ac79","period":{"type":"fiscal_year","value":2024},"provenance_class":"administrative","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:61a154dcb37f426f85982478","source":{"extracted_at":"2026-08-08","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx","raw_r2_uri":"r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx","source_file":"slcsp012025_Corrected.xlsx","source_name":"slc","source_sha256":"a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac","source_size_bytes":332185,"source_table":"Student loans in England, financial year 2024-25 (corrected tables), Table 1A","url":"https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx","vintage":"slcsp01_2025_corrected"},"source_release_key":"ledger.source_release.v2:91e47f96684950159cb0210d","source_series_key":"ledger.source_series.v2:513fa8b0e1881aafe14a47bf","universe_constraint_set_key":"ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c","universe_constraints":{"domain":"student_loans"},"value":2683104312.0299997,"value_type":"number","dimension_labels":{},"dimension_value_labels":{}} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:882329821c90dc683aa778d8", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_full_time", "concept_alignment_key": "ledger.concept_alignment.v2:5a6738918c70cab40798a5ed", "evidence_notes": "Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Full-time. GBP million.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_full_time"}, "dimension_labels": {"slc.repayment_plan": "Repayment plan"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimension_value_labels": {"slc.repayment_plan": {"net_repayments": "Net repayments posted during the financial year"}}, "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "name": "England", "vintage": "current"}, "label": "England 2024 fiscal year sum slc student loan net repayments plan 2 full time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_dimension_label": "Repayment plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_full_time", "measure_label": "Net repayments FY2024-25, Plan 2 Full-time", "measure_ordinal": 1, "record_set_id": "slc.repayments_2025.table_1a.fy2024", "record_set_spec_hash": "b748f6aeb2b7ad68bfb560a9", "record_set_spec_id": "slc.repayments_2025.table_1a.fy2024.v1", "source_column_id": "plan_2_full_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:a959c4f2a5576cd283af852a", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:0f682109e58dfad1ad28acd6", "ledger.source_cell.v1:60e6539baafd94e56648671a", "ledger.source_cell.v1:446cc4b0c7a9f20af575ec37", "ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"], "source_record_id": "slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_full_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_full_time", "source_measure_id": "plan_2_full_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:ea46f749cb24645a1742ac79", "period": {"type": "fiscal_year", "value": 2024}, "provenance_class": "administrative", "schema_version": "chronicle.consumer_fact.v4", "semantic_fact_key": "ledger.semantic_fact.v2:61a154dcb37f426f85982478", "source": {"extracted_at": "2026-08-08", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "source_file": "slcsp012025_Corrected.xlsx", "source_name": "slc", "source_sha256": "a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac", "source_size_bytes": 332185, "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx", "vintage": "slcsp01_2025_corrected"}, "source_release_key": "ledger.source_release.v2:91e47f96684950159cb0210d", "source_series_key": "ledger.source_series.v2:513fa8b0e1881aafe14a47bf", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 2683104312.0299997, "value_type": "number"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:b93d57062e37c3331c56e26c", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_full_time", "concept_alignment_key": "ledger.concept_alignment.v2:a8c365ac229fab8dcd821c65", "evidence_notes": "Corrected 2 July 2026 edition, Table 1A, net repayments posted during FY2025-26, Plan 2 Full-time; GBP million, effective 31 March 2026. No plan columns are summed in Chronicle.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2025-to-2026", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_full_time"}, "dimension_labels": {"slc.repayment_plan": "Repayment plan"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimension_value_labels": {"slc.repayment_plan": {"net_repayments": "Net repayments posted during the financial year"}}, "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "name": "England", "vintage": "current"}, "label": "England 2025 fiscal year sum slc student loan net repayments plan 2 full time for person [slc Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A slcsp012026.xlsx slcsp01_2026_corrected_2026_07_02]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_dimension_label": "Repayment plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_full_time", "measure_label": "Net repayments FY2025-26, Plan 2 Full-time", "measure_ordinal": 1, "record_set_id": "slc.repayments_2026.table_1a.fy2025", "record_set_spec_hash": "368fd2053b71ae85b023e7e2", "record_set_spec_id": "slc.repayments_2026.table_1a.fy2025.v1", "source_column_id": "plan_2_full_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:9d75b1600ee78ff4ec19dde1", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:369fec88a63e2aea3b83c442", "ledger.source_cell.v1:ad18cb21f6c2b7b565a86637", "ledger.source_cell.v1:031dc9973235f5db072525dc", "ledger.source_cell.v1:6a633f41243f1818f0dc1748"], "source_record_id": "slc.repayments_2026.table_1a.fy2025.net_repayments.plan_2_full_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_full_time", "source_measure_id": "plan_2_full_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:70988ed265aed9e5ce3f4e8b", "period": {"type": "fiscal_year", "value": 2025}, "period_coverage": {"basis": "fiscal", "end_date": "2026-03-31", "notes": "Net repayments posted during the financial year, effective 31 March 2026. Posting-year basis, not income-earned tax-year repayments. England-domiciled borrowers studying in the UK and EU-domiciled borrowers studying in England.", "source_period_label": "2025-26", "start_date": "2025-04-01"}, "provenance_class": "administrative", "schema_version": "chronicle.consumer_fact.v4", "semantic_fact_key": "ledger.semantic_fact.v2:2234e59d01f9283d525959ec", "source": {"extracted_at": "2026-10-07", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/uk/slc/slc-student-loan-repayments-england-2026/2026/9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1/slcsp012026.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/uk/slc/slc-student-loan-repayments-england-2026/2026/9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1/slcsp012026.xlsx", "source_file": "slcsp012026.xlsx", "source_name": "slc", "source_sha256": "9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1", "source_size_bytes": 345455, "source_table": "Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6a44d1241a04d4dae8b8155e/slcsp012026.xlsx", "vintage": "slcsp01_2026_corrected_2026_07_02"}, "source_release_key": "ledger.source_release.v2:acae195af5f666ab41fc757d", "source_series_key": "ledger.source_series.v2:035fe58a1b96fe5311058607", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 3128518409.2699995, "value_type": "number"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:a2024c03e027506e656e205c", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_part_time", "concept_alignment_key": "ledger.concept_alignment.v2:a1172b3cf0b0d878d2fa7b55", "evidence_notes": "Corrected 2 July 2026 edition, Table 1A, net repayments posted during FY2025-26, Plan 2 Part-time; GBP million, effective 31 March 2026. No plan columns are summed in Chronicle.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2025-to-2026", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_part_time"}, "dimension_labels": {"slc.repayment_plan": "Repayment plan"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimension_value_labels": {"slc.repayment_plan": {"net_repayments": "Net repayments posted during the financial year"}}, "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "name": "England", "vintage": "current"}, "label": "England 2025 fiscal year sum slc student loan net repayments plan 2 part time for person [slc Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A slcsp012026.xlsx slcsp01_2026_corrected_2026_07_02]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_dimension_label": "Repayment plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_part_time", "measure_label": "Net repayments FY2025-26, Plan 2 Part-time", "measure_ordinal": 2, "record_set_id": "slc.repayments_2026.table_1a.fy2025", "record_set_spec_hash": "368fd2053b71ae85b023e7e2", "record_set_spec_id": "slc.repayments_2026.table_1a.fy2025.v1", "source_column_id": "plan_2_part_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:c12d5cf574ddc1253dc17231", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:25282f94aacb77b522dce164", "ledger.source_cell.v1:ebadadf8b8838f0c896397a7", "ledger.source_cell.v1:031dc9973235f5db072525dc", "ledger.source_cell.v1:6a633f41243f1818f0dc1748"], "source_record_id": "slc.repayments_2026.table_1a.fy2025.net_repayments.plan_2_part_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_part_time", "source_measure_id": "plan_2_part_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:250952cb74500cc5207d6f2a", "period": {"type": "fiscal_year", "value": 2025}, "period_coverage": {"basis": "fiscal", "end_date": "2026-03-31", "notes": "Net repayments posted during the financial year, effective 31 March 2026. Posting-year basis, not income-earned tax-year repayments. England-domiciled borrowers studying in the UK and EU-domiciled borrowers studying in England.", "source_period_label": "2025-26", "start_date": "2025-04-01"}, "provenance_class": "administrative", "schema_version": "chronicle.consumer_fact.v4", "semantic_fact_key": "ledger.semantic_fact.v2:7e84271beaeb3348fd5dd208", "source": {"extracted_at": "2026-10-07", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/uk/slc/slc-student-loan-repayments-england-2026/2026/9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1/slcsp012026.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/uk/slc/slc-student-loan-repayments-england-2026/2026/9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1/slcsp012026.xlsx", "source_file": "slcsp012026.xlsx", "source_name": "slc", "source_sha256": "9e1e524997974aa3251bc138f07d97437cb551d7b3a1c944cad0be2bdd863dd1", "source_size_bytes": 345455, "source_table": "Student loans in England, financial year 2025-26 (corrected 2 July 2026), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6a44d1241a04d4dae8b8155e/slcsp012026.xlsx", "vintage": "slcsp01_2026_corrected_2026_07_02"}, "source_release_key": "ledger.source_release.v2:acae195af5f666ab41fc757d", "source_series_key": "ledger.source_series.v2:035fe58a1b96fe5311058607", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 105861504.03, "value_type": "number"} {"aggregate_fact_key":"ledger.aggregate_fact.v2:a82c84f67b40867564d2c847","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"hmrc","canonical_concept":"hmrc.spi_employment_income_amount","concept_alignment_key":"ledger.concept_alignment.v2:954e6c895535b23e4c7805cb","evidence_notes":"SPI collated tables 2023-24, Table_3_6, column: Employment income (Amount); taxpayers in thousands, amounts GBP million.","evidence_url":"https://www.gov.uk/government/statistics/personal-incomes-statistics-for-the-tax-year-2023-to-2024","relation":"source_label","source_concept":"hmrc.spi_employment_income_amount"},"dimension_set_key":"ledger.dimension_set.v2:2abee80869ae40d61ee490c3","dimensions":{"total_income_lower_bound":12570},"entity":{"name":"person","role":"taxpayer"},"geography":{"id":"K02000001","level":"country","vintage":"current"},"label":"United Kingdom 2023 tax year sum hmrc spi employment income amount for person (total income lower bound=12570) [hmrc SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income Collated_Tables_3_1_to_3_11_2324.ods spi_2023_24]","layout":{"groupby_dimension":"hmrc.total_income_band","groupby_ordinal":0,"groupby_value_id":"band_12570","groupby_value_label":"Total income from GBP 12 570","measure_id":"employment_amount","measure_label":"Employment (amount)","measure_ordinal":3,"record_set_id":"hmrc.spi_2324.table_3_6","record_set_spec_hash":"5d819678ed0074660bcee770","record_set_spec_id":"hmrc.spi_2324.table_3_6.v1","source_column_id":"employment_amount","source_row_id":"band_12570","table_record_kind":"detail","groupby_dimension_label":"Total income band"},"legacy_fact_key":"ledger.fact.v1:18e235114b5444256783fd7a","lineage":{"source_cell_keys":["ledger.source_cell.v1:cfbcf3282db1fcb71a277b00","ledger.source_cell.v1:057369c1997d122b69f47027"],"source_record_id":"hmrc.spi_2324.table_3_6.band_12570.employment_amount","source_row_keys":[]},"observed_measure":{"source_concept":"hmrc.spi_employment_income_amount","source_measure_id":"employment_amount","source_name":"hmrc","source_table":"SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:631d0596c3c14bb4621a9da2","period":{"type":"tax_year","value":2023},"provenance_class":"survey_aggregate","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:debc6506b4121d8c968f8b4b","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/hmrc/hmrc-spi-income-bands-2023-24/2024/ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e/Collated_Tables_3_1_to_3_11_2324.ods","raw_r2_uri":"r2://ledger-raw/raw/hmrc/hmrc-spi-income-bands-2023-24/2024/ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e/Collated_Tables_3_1_to_3_11_2324.ods","source_file":"Collated_Tables_3_1_to_3_11_2324.ods","source_name":"hmrc","source_sha256":"ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e","source_size_bytes":166693,"source_table":"SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income","url":"https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods","vintage":"spi_2023_24"},"source_release_key":"ledger.source_release.v2:cf26a12e28615db0aa77c564","source_series_key":"ledger.source_series.v2:90b4b7a93b4bedd73c4fd852","survey_instrument":"Survey of Personal Incomes","universe_constraint_set_key":"ledger.universe_constraint_set.v2:1b19141149ccab3a1cc4207e","universe_constraints":{"constraints":[{"operator":"==","role":"filter","value":12570,"variable":"total_income_lower_bound"}],"domain":"personal_incomes"},"value":16900000000,"value_type":"integer","dimension_labels":{"total_income_lower_bound":"Total income lower bound"},"dimension_value_labels":{"total_income_lower_bound":{"12570":"£12,570"}}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:d8cce1d228655346105aeef0","aggregation":{"method":"sum"},"assertion":"observation","concept_alignment":{"authority":"obr","canonical_concept":"obr.income_tax","concept_alignment_key":"ledger.concept_alignment.v2:c6c41e9a05252a482bf75215","evidence_notes":"OBR EFO March 2026 detailed forecast tables, sheet 3.4, row 6 ('Income tax (gross of tax credits)'), GBP billion.","evidence_url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/","relation":"source_label","source_concept":"obr.income_tax"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"resident_population"},"geography":{"id":"K02000001","level":"country","vintage":"current"},"label":"United Kingdom 2024 fiscal year sum obr income tax for person [obr EFO March 2026 detailed forecast tables: receipts efo_receipts.xlsx efo_march_2026]","layout":{"groupby_dimension":"obr.efo_line","groupby_ordinal":0,"groupby_value_id":"income_tax","groupby_value_label":"Income tax (gross of tax credits)","measure_id":"amount","measure_label":"Income tax (gross of tax credits), FY2024-25","measure_ordinal":0,"record_set_id":"obr.efo_2026_03.receipts.income_tax.fy2024","record_set_spec_hash":"7a6dd51417655f8de3f32e6d","record_set_spec_id":"obr.efo_2026_03.receipts.income_tax.fy2024.v1","source_column_id":"amount","source_row_id":"income_tax","table_record_kind":"total","groupby_dimension_label":"Economic and fiscal outlook line"},"legacy_fact_key":"ledger.fact.v1:9a563dd8855501cc7cdadb18","lineage":{"source_cell_keys":["ledger.source_cell.v1:6cc77b7de11ed56f1ca4fb1b","ledger.source_cell.v1:85f22ad465d952bc9517242f"],"source_record_id":"obr.efo_2026_03.receipts.income_tax.fy2024.income_tax.amount","source_row_keys":[]},"observed_measure":{"source_concept":"obr.income_tax","source_measure_id":"amount","source_name":"obr","source_table":"EFO March 2026 detailed forecast tables: receipts","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:954247698e8178993728e76b","period":{"type":"fiscal_year","value":2024},"provenance_class":"model_output","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:7bbf4e1886a8d2a087909593","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx","raw_r2_uri":"r2://ledger-raw/raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx","source_file":"efo_receipts.xlsx","source_name":"obr","source_sha256":"f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28","source_size_bytes":187899,"source_table":"EFO March 2026 detailed forecast tables: receipts","url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/","vintage":"efo_march_2026"},"source_release_key":"ledger.source_release.v2:cd7332ed9168974f4875f7c7","source_series_key":"ledger.source_series.v2:e66e203e3481ee259686e750","universe_constraint_set_key":"ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad","universe_constraints":{"domain":"public_sector_finances"},"value":305905000000,"value_type":"integer","dimension_labels":{},"dimension_value_labels":{}} {"aggregate_fact_key":"ledger.aggregate_fact.v2:d928e7da0fbfe088ca1a30d7","aggregation":{"method":"sum"},"assertion":"source_projection","concept_alignment":{"authority":"obr","canonical_concept":"obr.income_tax","concept_alignment_key":"ledger.concept_alignment.v2:c6c41e9a05252a482bf75215","evidence_notes":"OBR EFO March 2026 detailed forecast tables, sheet 3.4, row 6 ('Income tax (gross of tax credits)'), GBP billion.","evidence_url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/","relation":"source_label","source_concept":"obr.income_tax"},"dimension_set_key":"ledger.dimension_set.v2:44136fa355b3678a1146ad16","dimensions":{},"entity":{"name":"person","role":"resident_population"},"geography":{"id":"K02000001","level":"country","vintage":"current"},"label":"United Kingdom 2025 fiscal year projected sum obr income tax for person [obr EFO March 2026 detailed forecast tables: receipts efo_receipts.xlsx efo_march_2026]","layout":{"groupby_dimension":"obr.efo_line","groupby_ordinal":0,"groupby_value_id":"income_tax","groupby_value_label":"Income tax (gross of tax credits)","measure_id":"amount","measure_label":"Income tax (gross of tax credits), FY2025-26","measure_ordinal":0,"record_set_id":"obr.efo_2026_03.receipts.income_tax.fy2025","record_set_spec_hash":"e2d3c601ace5447a5fe449bc","record_set_spec_id":"obr.efo_2026_03.receipts.income_tax.fy2025.v1","source_column_id":"amount","source_row_id":"income_tax","table_record_kind":"total","groupby_dimension_label":"Economic and fiscal outlook line"},"legacy_fact_key":"ledger.fact.v1:ac779b21d033c2c724a112ca","lineage":{"source_cell_keys":["ledger.source_cell.v1:916eb6e55cfdecb1aaae6b03","ledger.source_cell.v1:487ced430603f1287c1595a1"],"source_record_id":"obr.efo_2026_03.receipts.income_tax.fy2025.income_tax.amount","source_row_keys":[]},"observed_measure":{"source_concept":"obr.income_tax","source_measure_id":"amount","source_name":"obr","source_table":"EFO March 2026 detailed forecast tables: receipts","unit":"gbp"},"observed_measure_key":"ledger.observed_measure.v2:954247698e8178993728e76b","period":{"type":"fiscal_year","value":2025},"provenance_class":"model_output","schema_version":"ledger.consumer_fact.v1","semantic_fact_key":"ledger.semantic_fact.v2:1cda5b118cdb34e16de09a41","source":{"extracted_at":"2026-08-06","extraction_method":"CellSelectorSpec and SourceRecordSpec resolved from cells","method_notes":"Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.","raw_r2_bucket":"ledger-raw","raw_r2_key":"raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx","raw_r2_uri":"r2://ledger-raw/raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx","source_file":"efo_receipts.xlsx","source_name":"obr","source_sha256":"f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28","source_size_bytes":187899,"source_table":"EFO March 2026 detailed forecast tables: receipts","url":"https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/","vintage":"efo_march_2026"},"source_release_key":"ledger.source_release.v2:cd7332ed9168974f4875f7c7","source_series_key":"ledger.source_series.v2:dae31655351be8d2e0736a5d","universe_constraint_set_key":"ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad","universe_constraints":{"domain":"public_sector_finances"},"value":331437583074.4429,"value_type":"number","dimension_labels":{},"dimension_value_labels":{}} From 254be6d4134ef9cc1c381d1a34bb95e38cbaa649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 01:01:04 +0000 Subject: [PATCH 28/39] Band rounded record counts from three to nine and guard the old label Vahid's review of #1422 (its second and third points). - Since the move to a floor of three, rounded_count printed three to nine exactly, while extreme_count and support_band print "3-9" and the module's own rule is that no exact count narrows a small group by difference. It now reads "3-9" there too. Two tests that read an incidental exact count follow. - The module docstring and the changelog say that the SPI Public Use Tape's two conditions (SN 9422) are unchanged by the move to three. - A guard test fails when a UK runtime module, the UK spec, the gate notes or a tool still writes the old "<10" label, so that a receipt left on the floor of ten cannot land unnoticed. #1426's SPI pay-floor receipt writes it today; whichever of the two lands second moves it onto UK_DISCLOSURE_FLOOR. Co-Authored-By: Claude Opus 5.5 --- .../1095-uk-disclosure-floor-three.changed.md | 2 +- .../build/uk_runtime/receipt_counts.py | 29 +++++++++------- .../uk/test_uk_lcfs_consumption.py | 6 ++-- .../uk/test_uk_private_rent_receipt_tool.py | 3 +- .../engine_free/uk/test_uk_receipt_counts.py | 33 +++++++++++++++++-- 5 files changed, 53 insertions(+), 20 deletions(-) diff --git a/changelog.d/1095-uk-disclosure-floor-three.changed.md b/changelog.d/1095-uk-disclosure-floor-three.changed.md index c2c52ad05a..8ba6b1a4d5 100644 --- a/changelog.d/1095-uk-disclosure-floor-three.changed.md +++ b/changelog.d/1095-uk-disclosure-floor-three.changed.md @@ -1 +1 @@ -UK stage receipts, stage-health gates and report tools withhold a figure only when it rests on one or two distinct source households (CD171's absolute floor), not on fewer than ten (María's ruling of 2026-10-29, microcosm#1095). One constant, `receipt_counts.UK_DISCLOSURE_FLOOR`, sets the floor. A withheld figure reads `"<3"`. Support and extreme counts gain a `"3-9"` band, and rounded record counts print three to nine exactly. The statistical floors stay: the zero-support floor, donor-cell minimums, the private-rent tool's ten-row group rule, and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. +UK stage receipts, stage-health gates and report tools withhold a figure only when it rests on one or two distinct source households (CD171's absolute floor), not on fewer than ten (María's ruling of 2026-10-29, microcosm#1095). One constant, `receipt_counts.UK_DISCLOSURE_FLOOR`, sets the floor. A withheld figure reads `"<3"`. Support, extreme and rounded record counts read `"3-9"` from three to nine, so a count just above the floor never narrows a small group by difference. The statistical floors stay: the zero-support floor, donor-cell minimums, the private-rent tool's ten-row group rule, and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. The SPI Public Use Tape's own two conditions (SN 9422) are unchanged: no attempt may be made to attribute a record to a named individual, and material that includes analyses of the tape goes to HMRC at least ten working days before it is distributed or published. diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py index 7ada7a28be..44aa7789e5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py @@ -11,15 +11,17 @@ Three is CD171's absolute floor. The build used ten, CD171's working minimum against secondary disclosure across outputs, until María's ruling of -2026-10-29 moved every output to three (``UK_DISCLOSURE_FLOOR``). No study the -build reads sets a higher one. The UK Data Service catalogue entries were read for conditions beyond -the End User Licence (microcosm#1278): the FRS 2024-25 (SN 9563) has none -(checked 2026-10-16), and neither have the LCFS, ETB, WAS and NTS studies -(checked 2026-10-14). The SPI 2022-23 Public Use Tape (SN 9422, checked -2026-10-16) adds two: no attempt may be made to attribute a record to a named -individual, and material that includes analyses of the tape goes to HMRC at -least ten working days before it is distributed or published. The build -marks the outputs that rest on the tape +2026-10-29 moved every output to three (``UK_DISCLOSURE_FLOOR``). Every count +from three to nine reads "3-9", so a count just above the floor never narrows +a small group by difference. No study the build reads sets a higher floor. +The UK Data Service catalogue entries were read for conditions beyond the End +User Licence (microcosm#1278): the FRS 2024-25 (SN 9563) has none (checked +2026-10-16), and neither have the LCFS, ETB, WAS and NTS studies (checked +2026-10-14). The SPI 2022-23 Public Use Tape (SN 9422, checked 2026-10-16) +adds two: no attempt may be made to attribute a record to a named individual, +and material that includes analyses of the tape goes to HMRC at least ten +working days before it is distributed or published. The move to three +changes neither. The build marks the outputs that rest on the tape (:mod:`microcosm.build.uk_runtime.spi_dependency`). """ @@ -86,10 +88,13 @@ def distinct_count( def rounded_count(count: int) -> int | str: """A count of donor records, rounded. - Zero exact, one or two "<3", three to nine exact, then to the nearest ten + Zero exact, one or two "<3", three to nine "3-9", then to the nearest ten below a thousand and to the nearest hundred from a thousand, so that a count near a survey's published sample size does not give back by - difference how many records a step left out. Halves round up. + difference how many records a step left out. Halves round up. The band + keeps a count just above the floor from narrowing a small group by + difference, as an exact one would beside another receipt (the review of + microcosm#1422). """ value = int(count) @@ -100,7 +105,7 @@ def rounded_count(count: int) -> int | str: if value < UK_DISCLOSURE_FLOOR: return UK_WITHHELD if value < 10: - return value + return UK_BELOW_TEN_BAND if value < 1000: return (value + 5) // 10 * 10 return (value + 50) // 100 * 100 diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py index 60c43351c5..5e62943133 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py @@ -1139,10 +1139,10 @@ def test_fuel_flag_evidence_withholds_every_share_beside_a_thin_group() -> None: recipient_weights=np.ones(32), ice_share_receipt={"rate": 0.9}, ) - # Three donors read exactly at the floor of three; each of their groups - # rests on one, so every share beside them is withheld. + # Three donors read "3-9", the band from the floor of three; each of their + # groups rests on one, so every share beside them is withheld. assert evidence["donor"] == { - "households": 3, + "households": "3-9", "with_vehicles_share": "<3", "positive_fuel_share": "<3", "positive_fuel_share_among_vehicle_households": "<3", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py index 4d1af66ac7..98eb4bb279 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_private_rent_receipt_tool.py @@ -446,7 +446,8 @@ def test_spine_values_count_frs_channel_households_only(): ) frame.loc[2:, "channel"] = "spi" every = _summary(frame)["rents_by_cell"]["nation"]["England"] - assert every["source_households"] == 8 + # All eight households carry the cell, so it reads "3-9", not "<3". + assert every["source_households"] == "3-9" frs = _summary(frame, frs_carriers=True)["rents_by_cell"]["nation"]["England"] assert frs == {"withheld": "<3"} # A cell of SPI rows only has no FRS-channel carrier: it reads "<3". diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py index 4dd6419629..e45d2f3a9a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py @@ -2,6 +2,8 @@ from __future__ import annotations +import re + import pytest from microcosm.build.uk_runtime.receipt_counts import ( @@ -13,6 +15,7 @@ small_cell_share, support_band, ) +from test_support.paths import paths_for @pytest.mark.parametrize( @@ -20,11 +23,12 @@ [ (0, 0), # The floor of three (María's ruling of 2026-10-29): one or two are - # withheld, three to nine read exactly, then the rounding starts. + # withheld, three to nine read "3-9" (the review of microcosm#1422), + # then the rounding starts. (1, "<3"), (2, "<3"), - (3, 3), - (9, 9), + (3, "3-9"), + (9, "3-9"), (10, 10), (14, 10), (25, 30), @@ -77,6 +81,29 @@ def test_support_band(count, expected) -> None: assert support_band(count) == expected +def test_no_uk_output_still_withholds_at_ten() -> None: + """Every UK receipt, gate note and tool withholds through + ``UK_DISCLOSURE_FLOOR``. One that still writes the old "<10" label stays on + the floor of ten without anyone noticing, as the SPI pay-floor receipt of + microcosm#1426 would if it landed second (the review of microcosm#1422).""" + + root = paths_for("microcosm-build").repository + build = paths_for("microcosm-build").package / "src" / "microcosm" / "build" + label = re.compile(r"<10(?![\d%])") + writers = sorted( + path.relative_to(root).as_posix() + for path in ( + *(build / "uk_runtime").rglob("*.py"), + *(build / "uk").glob("*.py"), + *(build / "uk" / "spec").glob("*.yaml"), + build / "uk" / "gates.json", + *(root / "tools").glob("*.py"), + ) + if label.search(path.read_text(encoding="utf-8")) + ) + assert writers == [] + + def test_counts_refuse_a_negative_count() -> None: with pytest.raises(ValueError, match="negative"): rounded_count(-1) From 1f46653b6efd6140e68c2a93404503119328da95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 01:01:49 +0000 Subject: [PATCH 29/39] Move the default UK load flip out to its own PR Vahid's review of #1422 (its fourth point): pointing load("uk") at latest-national.json and retiring the national variant changes the default load for every consumer and depends on nothing in this PR. It moves to #1432, which can land now and also removes #966's unreleased changelog entry that described the opposite state. This reverts commit 5c7a40d9c4c94f71729675054150f6d762dc8777. Co-Authored-By: Claude Opus 5.5 --- .../823-national-line-default-load.changed.md | 1 - ...k-national-release-assembly-runbook-806.md | 12 ++-- .../uk/test_uk_release_assembler.py | 4 +- .../src/microcosm/data/registry.py | 14 ++--- .../tests/engine_free/shared/test_loader.py | 58 ++++++++++--------- .../tests/engine_free/shared/test_registry.py | 22 +++---- 6 files changed, 57 insertions(+), 54 deletions(-) delete mode 100644 changelog.d/823-national-line-default-load.changed.md diff --git a/changelog.d/823-national-line-default-load.changed.md b/changelog.d/823-national-line-default-load.changed.md deleted file mode 100644 index 43b06fe7d0..0000000000 --- a/changelog.d/823-national-line-default-load.changed.md +++ /dev/null @@ -1 +0,0 @@ -The UK 2024-25 national line is the default UK load: `microcosm.data.load("uk")` and `load("uk", 2025)` follow `latest-national.json`, which has named the certified cut microcosm-uk-2024-25-national-20261025T091414Z-a6299504 (built on policyengine-uk 2.151.0) since 26 October 2026, instead of the June 2023 `populace_uk_2023` artifact, which stays at `load("uk", 2023)`. The line's own `national` variant key retires (microcosm#823, Max's ruling). diff --git a/docs/uk-national-release-assembly-runbook-806.md b/docs/uk-national-release-assembly-runbook-806.md index 38a19e3e6c..bec7ea1896 100644 --- a/docs/uk-national-release-assembly-runbook-806.md +++ b/docs/uk-national-release-assembly-runbook-806.md @@ -222,11 +222,13 @@ in §4. The promotion moves only `latest-national.json`, recording `national` as the line and the reviewed cut tag as its `revision`. It never moves the repository-global `latest.json`, which remains on the June 2023 release. -The 2025 national entry was registered off the default variant until the -first promotion, so that a default load never chased a pointer that did not -exist yet. The first certified cut was promoted on 2026-10-26, and the entry -is now the default variant (microcosm#823): `microcosm.data.load("uk")` and -`microcosm.data.load("uk", 2025)` follow `latest-national.json`. An explicit +The 2025 national entry is registered off the default variant until this +first promotion: `microcosm.data.load("uk", 2025, variant="national")` follows +`latest-national.json` as soon as the pointer exists, while +`microcosm.data.resolve("uk")` stays on the June 2023 line. The default moves +in a one-line follow-up PR after promotion (the registry entry's `variant` +becomes the default), with its test; sequencing it this way means a default +load never chases a pointer that does not exist yet. An explicit `microcosm.data.load("uk", 2023)` continues to follow `latest.json`. With `SLACK_WEBHOOK_POPULACE_UK` configured, successful promotion sends an diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py index 68f4fc644a..5c325d86a6 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_release_assembler.py @@ -28,7 +28,7 @@ uk_weight_projection_factor, ) from microcosm.data.contract import validate_release_dir -from microcosm.data.registry import DEFAULT_VARIANT, REGISTRY +from microcosm.data.registry import REGISTRY from microcosm.frame import WeightKind from test_support.paths import paths_for @@ -87,7 +87,7 @@ def test_national_dataset_filename_mirrors_registry() -> None: assert driver._DATASET_KEY == "microcosm_uk_2024_25" assert driver._DATASET_FILENAME == f"{driver._DATASET_KEY}.h5" - assert REGISTRY[("uk", 2025, DEFAULT_VARIANT)].filename == driver._DATASET_FILENAME + assert REGISTRY[("uk", 2025, "national")].filename == driver._DATASET_FILENAME def _frame(weights: list[float], *, weight_kind: WeightKind): diff --git a/packages/microcosm-data/src/microcosm/data/registry.py b/packages/microcosm-data/src/microcosm/data/registry.py index 385a062c01..e16e9f45fa 100644 --- a/packages/microcosm-data/src/microcosm/data/registry.py +++ b/packages/microcosm-data/src/microcosm/data/registry.py @@ -114,15 +114,15 @@ def register(spec: DatasetSpec) -> DatasetSpec: register( DatasetSpec( # microcosm#823: the UK 2024-25 national line, followed through its - # own pointer, is the default UK load. It stayed off the default - # variant until its first certified cut was promoted (review of #966; - # Max's #823 ruling), and latest-national.json has named - # microcosm-uk-2024-25-national-20261025T091414Z-a6299504 since - # 2026-10-26. resolve("uk") picks the latest default-variant year, so - # it loads this line; the June 2023 artifact stays at ("uk", 2023). + # own pointer. Registered OFF the default variant until the first + # promoted cut exists on the Hub: resolve("uk") picks the latest + # default-variant year at import time, so a default entry here would + # send every default load to a pointer that does not exist yet. The + # flip to DEFAULT_VARIANT is a one-line follow-up after promotion + # (review of #966; Max's #823 ruling keys the line as a variant). country="uk", year=2025, - variant=DEFAULT_VARIANT, + variant="national", hf_repo="policyengine/populace-uk-private", filename="microcosm_uk_2024_25.h5", engine_module="policyengine_uk.data", diff --git a/packages/microcosm-data/tests/engine_free/shared/test_loader.py b/packages/microcosm-data/tests/engine_free/shared/test_loader.py index decabfd3d3..69c5af1096 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_loader.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_loader.py @@ -345,22 +345,23 @@ def __init__(self, *, file_path: str) -> None: return constructed -def test_resolve_uk_default_is_the_promoted_national_line(): - """microcosm#823: once the national line's first certified cut was - promoted, the line became the default UK load; the June 2023 line stays - addressable at its year and its own pointer (Max's #823 ruling).""" - assert latest_year("uk") == 2025 - assert resolve("uk").key == ("uk", 2025, DEFAULT_VARIANT) - assert resolve("uk").pointer_path == "latest-national.json" - assert resolve("uk", 2023).pointer_path == "latest.json" - with pytest.raises(ValueError, match="variant 'national'"): - resolve("uk", 2025, variant="national") +def test_resolve_uk_default_stays_on_2023_until_the_national_line_is_promoted(): + """The national line is registered off the default variant until its + pointer exists on the Hub, so a default load never chases an absent + pointer (review of #966); the flip is a one-line follow-up.""" + assert latest_year("uk") == 2023 + assert resolve("uk").key == ("uk", 2023, DEFAULT_VARIANT) + assert resolve("uk", 2025, variant="national").pointer_path == ( + "latest-national.json" + ) + with pytest.raises(ValueError, match="published years"): + resolve("uk", 2025) def test_resolve_uk_national_variant_follows_the_line_pointer( tmp_path: Path, ) -> None: - spec = resolve("uk", 2025) + spec = resolve("uk", 2025, variant="national") manifest = _uk_release_manifest() hub = _line_pointer_hub( tmp_path, @@ -373,7 +374,7 @@ def test_resolve_uk_national_variant_follows_the_line_pointer( certified = loader._resolve_certified_release(spec, hub_download=hub) manifest_path = f"releases/{UK_NATIONAL_RELEASE_ID}/release_manifest.json" - assert spec.key == ("uk", 2025, DEFAULT_VARIANT) + assert spec.key == ("uk", 2025, "national") assert spec.pointer_path == "latest-national.json" assert certified.release_id == UK_NATIONAL_RELEASE_ID assert certified.artifact_revision == UK_NATIONAL_CUT_TAG @@ -448,7 +449,9 @@ def test_line_pointer_refuses_any_artifact_revision_mismatch(tmp_path: Path) -> ValueError, match=r"artifacts not pinned to expected revision.*calibration_report", ): - loader._resolve_certified_release(resolve("uk", 2025), hub_download=hub) + loader._resolve_certified_release( + resolve("uk", 2025, variant="national"), hub_download=hub + ) def test_local_area_line_selects_its_only_microdata_artifact(tmp_path: Path) -> None: @@ -565,7 +568,9 @@ def test_loader_refuses_an_unknown_dataset_role(tmp_path: Path) -> None: ) with pytest.raises(ValueError, match="unknown dataset_role 'research_preview'"): - loader._resolve_certified_release(resolve("uk", 2025), hub_download=hub) + loader._resolve_certified_release( + resolve("uk", 2025, variant="national"), hub_download=hub + ) def test_download_uses_pointer_manifest_and_release_revision( @@ -799,7 +804,7 @@ def _is_missing_pointer_error(exc: BaseException, pointer_path: str) -> bool: [ ("us", 2024, DEFAULT_VARIANT), ("uk", 2023, DEFAULT_VARIANT), - ("uk", 2025, DEFAULT_VARIANT), + ("uk", 2025, "national"), ], ) def test_live_latest_pointer_resolves_to_a_coherent_certified_release( @@ -818,9 +823,6 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( which are updated atomically with each certification PR. """ spec = resolve(country, year, variant=variant) - # The UK 2025 default follows its line's pointer since microcosm#823, so - # the pointer, not the variant, says how the release is named. - line = loader._line_from_pointer_path(spec.pointer_path) try: certified = loader._resolve_certified_release(spec) except Exception as exc: @@ -832,26 +834,26 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( pytest.skip( f"repo requires credentials this environment lacks (private): {exc}" ) - if line is not None and _is_missing_pointer_error(exc, spec.pointer_path): + if variant != DEFAULT_VARIANT and _is_missing_pointer_error( + exc, spec.pointer_path + ): # A line pointer exists only once its first cut is promoted; # until then the line is registered but not yet live. Anything # else on a promoted line (a manifest 404, a bad pin) fails. pytest.skip(f"line pointer {spec.pointer_path} not yet promoted: {exc}") raise + assert certified.release_id.startswith( + # Live certified releases still carry the pre-rename id prefix; new + # builds may adopt the microcosm- prefix at the next versioned release. + (f"microcosm-{country}-{spec.year}-", f"populace-{country}-{spec.year}-") + ) assert certified.artifact_repo_id == spec.hf_repo assert certified.artifact_path == spec.filename - if line is None: - assert certified.release_id.startswith( - # Live certified releases still carry the pre-rename id prefix; new - # builds may adopt the microcosm- prefix at the next versioned - # release. - (f"microcosm-{country}-{spec.year}-", f"populace-{country}-{spec.year}-") - ) + if variant == DEFAULT_VARIANT: assert certified.artifact_revision == certified.release_id else: # A line pointer names the immutable cut tag of its constant id. - assert certified.release_id.startswith(f"microcosm-{country}-") assert certified.artifact_revision.startswith(f"{certified.release_id}-") assert re.fullmatch(r"[0-9a-f]{64}", certified.artifact_sha256) assert certified.model.name == spec.engine_package @@ -860,7 +862,7 @@ def test_live_latest_pointer_resolves_to_a_coherent_certified_release( def test_line_pointer_refuses_a_manifest_with_another_lines_role(tmp_path: Path): """A line pointer carries one role: the national pointer cannot select a local-area manifest, nor a local-area pointer a national one.""" - spec = resolve("uk", 2025) + spec = resolve("uk", 2025, variant="national") manifest = _uk_release_manifest() manifest["dataset_role"] = "non_default_local_area" manifest["default_datasets"] = {} diff --git a/packages/microcosm-data/tests/engine_free/shared/test_registry.py b/packages/microcosm-data/tests/engine_free/shared/test_registry.py index 066a1933ff..eae3a397a5 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_registry.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_registry.py @@ -69,8 +69,8 @@ def test_available_lists_default_variant_keys_only_sorted(monkeypatch) -> None: keys = available() assert ("us", 2024) in keys assert ("uk", 2023) in keys - # The national line is the default variant since its promotion (#823). - assert ("uk", 2025) in keys + # The national line is off the default variant until promoted. + assert ("uk", 2025) not in keys assert ("zz", 2099) not in keys assert keys == sorted(keys) @@ -146,16 +146,16 @@ def test_uk_2025_dense_is_registered_off_the_default_variant() -> None: assert spec.filename == "microcosm_uk_2024_25_dense.h5" assert spec.engine_class == "UKSingleYearDataset" assert spec.engine_package == "policyengine-uk" - assert ("uk", 2025, DEFAULT_VARIANT) in REGISTRY + assert ("uk", 2025, "national") in REGISTRY -def test_uk_2025_national_line_is_the_default_variant_after_promotion(): - """microcosm#823: the line's first certified cut was promoted on - 2026-10-26, so the line moved to the default variant (Max's #823 - ruling) and its own variant key retired; the June 2023 line stays - addressable at its year.""" - spec = REGISTRY[("uk", 2025, DEFAULT_VARIANT)] +def test_uk_2025_national_is_registered_off_the_default_variant_until_promoted(): + """resolve("uk") must not reach a pointer that does not exist yet: the + line's pointer appears on the Hub at its first promotion, and only the + follow-up flip to the default variant moves the default (review of + #966; Max's #823 ruling keys the line as a variant).""" + spec = REGISTRY[("uk", 2025, "national")] + assert spec.variant == "national" != DEFAULT_VARIANT assert spec.pointer_path == "latest-national.json" assert spec.filename == "microcosm_uk_2024_25.h5" - assert ("uk", 2025, "national") not in REGISTRY - assert REGISTRY[("uk", 2023, DEFAULT_VARIANT)].filename == "populace_uk_2023.h5" + assert ("uk", 2025, DEFAULT_VARIANT) not in REGISTRY From 02df9df2b5bd8c2e09904ba869cef494e812d154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 05:26:29 +0000 Subject: [PATCH 30/39] Expect the January 2026 census and R7's windows in the feed-gated reference tests Two tests in test_uk_target_references.py read the pinned feed, so CI skips them, and they still expected values from before D5 and R7. On feed 53815b2: - the DfE rows bind the January 2026 census (D5), so the compiled caseloads and the signed-out age-4 cells move to DfE's January 2026 headline figures; - the Tax-Free Childcare top-up and Northern Ireland's bus receipts take the calendar-2025 window (R7), three twelfths of FY2024-25 and nine twelfths of FY2025-26, which the test now writes out; - the extended sum's refusal reads the January 2024 census through the target period, as it did before D5, since the row itself now selects January 2026. Every expected value matches the pinned feed's facts and the committed membership. The 15 feed-gated test files pass on 53815b2. Co-Authored-By: Claude Opus 5.5 --- .../uk/test_uk_target_references.py | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 9181f506e6..22bea00c87 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -545,6 +545,13 @@ def test_chronicle_household_reference_surface_is_complete() -> None: ) / (181.6 * 86 + 185.7 * 92 + 185.9 * 92 + 206.4 * 90 + 210.5 * 5) +def _calendar_2025_window(fy_2024: float, fy_2025: float) -> float: + """R7's calendar-2025 window: three twelfths of FY2024-25 and nine twelfths + of FY2025-26 (microcosm#1095).""" + + return 0.25 * fy_2024 + 0.75 * fy_2025 + + def test_childcare_and_bus_references_compile_with_declared_provenance() -> None: root = _TEST_PATHS.repository feed = root / STABLE_UK_FACT_FEED_NAME @@ -594,16 +601,18 @@ def test_childcare_and_bus_references_compile_with_declared_provenance() -> None == "3417388656.43538" ) assert {name: spec.value for name, spec in specs.items()} == { - "hmrc.tfc.government_top_up": 599_800_000.0, + "hmrc.tfc.government_top_up": pytest.approx( + _calendar_2025_window(632_200_000, 599_800_000) + ), "hmrc.tfc.children_with_used_accounts": 1_151_515.0, - "dfe.funded_childcare.working_parent_children_2_to_4": 621_482.0, - "dfe.funded_childcare.early_learning_2_year_olds": 95_031.0, - "dfe.funded_childcare.universal_only_children": 396_965.0, - "dfe.funded_childcare.working_parent_children_9_to_11_months": 29_155.0, - "dfe.funded_childcare.working_parent_children_age_1": 195_104.0, - "dfe.funded_childcare.working_parent_children_age_2": 242_453.0, - "dfe.funded_childcare.working_parent_children_age_3": 278_640.0, - "dfe.funded_childcare.universal_nursery_children_age_3": 565_954.0, + "dfe.funded_childcare.working_parent_children_2_to_4": 648_979.0, + "dfe.funded_childcare.early_learning_2_year_olds": 85_629.0, + "dfe.funded_childcare.universal_only_children": 362_581.0, + "dfe.funded_childcare.working_parent_children_9_to_11_months": 30_679.0, + "dfe.funded_childcare.working_parent_children_age_1": 210_825.0, + "dfe.funded_childcare.working_parent_children_age_2": 260_238.0, + "dfe.funded_childcare.working_parent_children_age_3": 278_490.0, + "dfe.funded_childcare.universal_nursery_children_age_3": 535_209.0, "dft.bus_fare_receipts.england": pytest.approx( 1_347_434_943.01459 * _LONDON_FARE_FACTOR + 2_069_953_713.42079 * _OUTSIDE_LONDON_FARE_FACTOR @@ -616,7 +625,10 @@ def test_childcare_and_bus_references_compile_with_declared_provenance() -> None "scotgov.bus.passenger_revenue": 391_000_000.0, "scotgov.bus.government_support": 499_000_000.0, "welshgov.bus.public_support": 131_489_970.0, - "dfi_ni.bus.passenger_receipts": 152_500_000.0, + # Metro/Glider plus Ulsterbus in each year. + "dfi_ni.bus.passenger_receipts": pytest.approx( + _calendar_2025_window(49_600_000 + 100_500_000, 49_000_000 + 103_500_000) + ), "nithc.public_transport_support": 111_700_000.0, } assert { @@ -676,8 +688,8 @@ def test_childcare_and_bus_references_compile_with_declared_provenance() -> None # bound working parent ages 2 and 3 plus DfE's signed-out age-4 cell, and # universal-only is the bound nursery age 3 plus the signed-out nursery # age-4 cell less the working parent ages 3 and 4 (DfE's published January - # 2025 headline figures). - working_parent_age_4, nursery_age_4 = 100_389.0, 210_040.0 + # 2026 headline figures, the rows' observation period). + working_parent_age_4, nursery_age_4 = 110_251.0, 216_113.0 value = {name: spec.value for name, spec in specs.items()} prefix = "dfe.funded_childcare." assert value[prefix + "working_parent_children_2_to_4"] == ( @@ -706,10 +718,12 @@ def test_dfe_extended_sum_refuses_the_suppressed_2024_member() -> None: ) facts = [json.loads(line) for line in feed.open() if '"source_name": "dfe"' in line] + # Read at the January 2024 census, which has no working parent "2 years" + # cell: the row itself selects January 2026 (microcosm#1095 D5). with pytest.raises(ValueError, match="expected 2 members.*resolved 1"): compile_ledger_target_references( facts, - [replace(reference, period=2024)], + [replace(reference, period=2024, observation_period=None)], country="uk", ) From f83d7a3c206ee6b285da8690cf24eb6b7a015e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 09:55:49 +0000 Subject: [PATCH 31/39] Link the ruling that moved the UK disclosure floor to three MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The module docstring of receipt_counts and the changelog fragment now link the microcosm#1095 comment that records María's ruling of 2026-10-29, as Vahid's review asked. Co-Authored-By: Claude Opus 5.5 --- .../1095-uk-disclosure-floor-three.changed.md | 2 +- .../build/uk_runtime/receipt_counts.py | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/changelog.d/1095-uk-disclosure-floor-three.changed.md b/changelog.d/1095-uk-disclosure-floor-three.changed.md index 8ba6b1a4d5..77209b06d3 100644 --- a/changelog.d/1095-uk-disclosure-floor-three.changed.md +++ b/changelog.d/1095-uk-disclosure-floor-three.changed.md @@ -1 +1 @@ -UK stage receipts, stage-health gates and report tools withhold a figure only when it rests on one or two distinct source households (CD171's absolute floor), not on fewer than ten (María's ruling of 2026-10-29, microcosm#1095). One constant, `receipt_counts.UK_DISCLOSURE_FLOOR`, sets the floor. A withheld figure reads `"<3"`. Support, extreme and rounded record counts read `"3-9"` from three to nine, so a count just above the floor never narrows a small group by difference. The statistical floors stay: the zero-support floor, donor-cell minimums, the private-rent tool's ten-row group rule, and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. The SPI Public Use Tape's own two conditions (SN 9422) are unchanged: no attempt may be made to attribute a record to a named individual, and material that includes analyses of the tape goes to HMRC at least ten working days before it is distributed or published. +UK stage receipts, stage-health gates and report tools withhold a figure only when it rests on one or two distinct source households (CD171's absolute floor), not on fewer than ten (María's ruling of 2026-10-29, [recorded on microcosm#1095](https://github.com/PolicyEngine/microcosm/issues/1095#issuecomment-6541929216)). One constant, `receipt_counts.UK_DISCLOSURE_FLOOR`, sets the floor. A withheld figure reads `"<3"`. Support, extreme and rounded record counts read `"3-9"` from three to nine, so a count just above the floor never narrows a small group by difference. The statistical floors stay: the zero-support floor, donor-cell minimums, the private-rent tool's ten-row group rule, and the SPI coherence tool's cell floor for correlations, medians and quantiles, since a median of a few records is one record's own value. The SPI Public Use Tape's own two conditions (SN 9422) are unchanged: no attempt may be made to attribute a record to a named individual, and material that includes analyses of the tape goes to HMRC at least ten working days before it is distributed or published. diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py index 44aa7789e5..f409be5e3a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/receipt_counts.py @@ -11,17 +11,18 @@ Three is CD171's absolute floor. The build used ten, CD171's working minimum against secondary disclosure across outputs, until María's ruling of -2026-10-29 moved every output to three (``UK_DISCLOSURE_FLOOR``). Every count -from three to nine reads "3-9", so a count just above the floor never narrows -a small group by difference. No study the build reads sets a higher floor. -The UK Data Service catalogue entries were read for conditions beyond the End -User Licence (microcosm#1278): the FRS 2024-25 (SN 9563) has none (checked -2026-10-16), and neither have the LCFS, ETB, WAS and NTS studies (checked -2026-10-14). The SPI 2022-23 Public Use Tape (SN 9422, checked 2026-10-16) -adds two: no attempt may be made to attribute a record to a named individual, -and material that includes analyses of the tape goes to HMRC at least ten -working days before it is distributed or published. The move to three -changes neither. The build marks the outputs that rest on the tape +2026-10-29 moved every output to three (``UK_DISCLOSURE_FLOOR``; recorded at +https://github.com/PolicyEngine/microcosm/issues/1095#issuecomment-6541929216). +Every count from three to nine reads "3-9", so a count just above the floor +never narrows a small group by difference. No study the build reads sets a +higher floor. The UK Data Service catalogue entries were read for conditions +beyond the End User Licence (microcosm#1278): the FRS 2024-25 (SN 9563) has +none (checked 2026-10-16), and neither have the LCFS, ETB, WAS and NTS studies +(checked 2026-10-14). The SPI 2022-23 Public Use Tape (SN 9422, checked +2026-10-16) adds two: no attempt may be made to attribute a record to a named +individual, and material that includes analyses of the tape goes to HMRC at +least ten working days before it is distributed or published. The move to +three changes neither. The build marks the outputs that rest on the tape (:mod:`microcosm.build.uk_runtime.spi_dependency`). """ From ddd82aa2f75b3fcaf3f779b428f3aae4f5860b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 10:20:42 +0000 Subject: [PATCH 32/39] Pin the window's refusal of a pinned service with no facts A selector that pins two services, one of which has no fact at all, refuses the calendar-year window, as one short of a year already does (Vahid's review, round 2). Co-Authored-By: Claude Opus 5.5 --- .../engine_free/shared/test_ledger_targets.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index 507086f1e9..0ad60e0f52 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -5071,6 +5071,34 @@ def test__given_a_pinned_dimension_value_short_of_a_year__then_calendar_year_win compile_ledger_target_references(facts, [reference], country="uk") +def test__given_a_pinned_dimension_value_with_no_facts__then_calendar_year_window_refuses() -> ( + None +): + # Given: both years for one pinned service and no fact at all for the other. + facts = [] + for opening_year in (2024, 2025): + fact = _cy_window_fact( + key=f"ulsterbus_fy{opening_year}", + value=10.0, + opening_year=opening_year, + measure_id="passenger_receipts", + ) + fact["dimensions"] = {**fact["dimensions"], "service": "ulsterbus"} + facts.append(fact) + reference = _cy_window_reference( + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "passenger_receipts", + "geography_level": "country", + "geography_id": "0100000US", + "dimension_values": {"service": ["ulsterbus", "metro_glider"]}, + }, + ) + + with pytest.raises(ValueError, match="each of 2 series .* 1 of 1 matched series"): + compile_ledger_target_references(facts, [reference], country="uk") + + def test__given_a_two_series_selector_short_of_a_year__then_calendar_year_window_refuses() -> ( None ): From 0a69ef4b507fa6feec0207078fd41c220d4b4aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 11:35:07 +0000 Subject: [PATCH 33/39] Restate the last gate notes and docstrings that said ten The LCFS excise-quantities and gambling-participation gate notes and two stage-health docstrings still described withholding at ten, while their receipts withhold at UK_DISCLOSURE_FLOOR (three). The guard test reads the "<10" label, not the prose, so it missed them. The gate battery and spine-part digests are re-pinned. Co-Authored-By: Claude Opus 5.5 --- packages/microcosm-build/src/microcosm/build/uk/gates.json | 4 ++-- .../src/microcosm/build/uk_runtime/stage_health.py | 6 +++--- packages/microcosm-data/src/microcosm/data/contract.py | 6 +++--- .../tests/engine_free/shared/test_contract.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index 032ceb2352..170f17cfed 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -425,7 +425,7 @@ "maximum_parent_residual_share": 0.01, "required_support_band": "30+" }, - "notes": "Stage-time fact check on the lcfs excise_quantities and excise_shares receipts (microcosm#1359): every policyengine-uk excise input the stage declares is recomputed from the vendored rows through the stage's own declaration, never taken from the receipt: each alcohol product's FY2024-25 HMRC clearances over the engine's strength, each tobacco product's clearances, each gambling duty base (HMRC's receipts for the duty or Machine Games Duty's liabilities for the band over the engine's rate, and General Betting Duty's base split by the Gambling Commission's gross gambling yield) and the beer and cider draught shares. The receipt's levels must equal them, the prior-weighted frame total of each input must equal its level and the factor must reproduce it from the household spending it is shared by, and an input is positive exactly where that spending is; the basis must be the declared fiscal year over the engine's 52 weeks, and each draught share written must be the published ratio. The three shares the spending comes from (tobacco of P602's off-trade lines, on-trade alcohol of P611, gambling stakes of P609) must have stayed in [0, 1] on the frame and rest on 30 or more donors each, and at most one percent of the donors, by weight, may carry a published total beside a share's diary lines (a share withheld for resting on under ten donors is under it). The levels are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared levels; it cannot catch an error in the rows themselves or a later stage moving the columns. A population fact check: the synthetic smoke records it without blocking." + "notes": "Stage-time fact check on the lcfs excise_quantities and excise_shares receipts (microcosm#1359): every policyengine-uk excise input the stage declares is recomputed from the vendored rows through the stage's own declaration, never taken from the receipt: each alcohol product's FY2024-25 HMRC clearances over the engine's strength, each tobacco product's clearances, each gambling duty base (HMRC's receipts for the duty or Machine Games Duty's liabilities for the band over the engine's rate, and General Betting Duty's base split by the Gambling Commission's gross gambling yield) and the beer and cider draught shares. The receipt's levels must equal them, the prior-weighted frame total of each input must equal its level and the factor must reproduce it from the household spending it is shared by, and an input is positive exactly where that spending is; the basis must be the declared fiscal year over the engine's 52 weeks, and each draught share written must be the published ratio. The three shares the spending comes from (tobacco of P602's off-trade lines, on-trade alcohol of P611, gambling stakes of P609) must have stayed in [0, 1] on the frame and rest on 30 or more donors each, and at most one percent of the donors, by weight, may carry a published total beside a share's diary lines (a share withheld for resting on one or two donors is under it). The levels are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared levels; it cannot catch an error in the rows themselves or a later stage moving the columns. A population fact check: the synthetic smoke records it without blocking." }, { "id": "uk_stage_lcfs_consumption_gambling_participation", @@ -445,7 +445,7 @@ ], "required_support_band": "30+" }, - "notes": "Stage-time fact check on the lcfs gambling_participation receipt (microcosm#1359): each key's adult participation rates (the National Lottery's products, and the betting and gaming the other gambling duties charge; past four weeks and past twelve months, by sex and age band) are recomputed from the vendored GSGB 2025 rows through the stage's own declaration, never taken from the receipt, and must equal the receipt's, and the receipt's settings (theta per key, the occasional players' stake share, the strata, the propensity classifier, the seed and the salt) must be the declared ones. Per key, each household stratum the receipt gives must sit within maximum_stratum_shortfall of its four-week target and from there of its twelve-month target, or add no household where the diary already passed a target; the national shares must reach the targets less that shortfall; no added household may lack a stake; the three classes' shares of the key's stakes must sum to one; the scale that brings the added regular players' mean stake to the seen households' must lie in amount_scale_bounds, so a broken stake draw that the anchoring would otherwise hide fails (Vahid's review, round 4; the upper bound rose from 2.0 to 2.5 on María's ruling of 2026-10-26, since full spine builds scale the National Lottery's added regular players by about 2.03); the propensity must rest on 30 or more donors; and the excise levelling must have shared the gambling bases by the topped-up keys, each key positive on its twelve-month share. The receipt withholds a stratum with a cell under ten source households, which the gate counts rather than checks; a key withheld nationally fails. The rates are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared rates or settings; it cannot catch an error in the rows themselves, and the stratum targets, which need the frame's adults, are the step's own (it refuses a stratum it cannot fill). A population fact check: the synthetic smoke records it without blocking." + "notes": "Stage-time fact check on the lcfs gambling_participation receipt (microcosm#1359): each key's adult participation rates (the National Lottery's products, and the betting and gaming the other gambling duties charge; past four weeks and past twelve months, by sex and age band) are recomputed from the vendored GSGB 2025 rows through the stage's own declaration, never taken from the receipt, and must equal the receipt's, and the receipt's settings (theta per key, the occasional players' stake share, the strata, the propensity classifier, the seed and the salt) must be the declared ones. Per key, each household stratum the receipt gives must sit within maximum_stratum_shortfall of its four-week target and from there of its twelve-month target, or add no household where the diary already passed a target; the national shares must reach the targets less that shortfall; no added household may lack a stake; the three classes' shares of the key's stakes must sum to one; the scale that brings the added regular players' mean stake to the seen households' must lie in amount_scale_bounds, so a broken stake draw that the anchoring would otherwise hide fails (Vahid's review, round 4; the upper bound rose from 2.0 to 2.5 on María's ruling of 2026-10-26, since full spine builds scale the National Lottery's added regular players by about 2.03); the propensity must rest on 30 or more donors; and the excise levelling must have shared the gambling bases by the topped-up keys, each key positive on its twelve-month share. The receipt withholds a stratum with a cell on one or two source households, which the gate counts rather than checks; a key withheld nationally fails. The rates are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared rates or settings; it cannot catch an error in the rows themselves, and the stratum targets, which need the frame's adults, are the step's own (it refuses a stratum it cannot fill). A population fact check: the synthetic smoke records it without blocking." }, { "id": "uk_stage_lcfs_consumption_basis", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index 40ccdfd757..1671a041ae 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -3686,7 +3686,7 @@ def _excise_quantities_gate( rest on ``required_support_band`` donors, and the donor share whose published total sits beside its diary lines must be at most ``maximum_parent_residual_share``. A share the receipt withholds for - resting on under ten donors is flagged unchecked, never failed (María's + resting on one or two donors is flagged unchecked, never failed (María's ruling of 2026-10-26). """ @@ -4695,8 +4695,8 @@ def _apprentice_draw_gate( ``maximum_relative_realization_deviation`` of the target. The relief the flags imply at the engine's own Class 1 schedule must stay at or below ``maximum_implied_relief``, HMRC's apprentice relief for every apprentice - under 25 (Vahid's review of microcosm#1373, S1). A figure resting on fewer - than ten source households, which the receipt prints "<3", is named + under 25 (Vahid's review of microcosm#1373, S1). A figure resting on one or + two source households, which the receipt prints "<3", is named unchecked, never failed: a small-cell rule never stops a build (María's ruling of 2026-10-26). """ diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 2f88ed06df..35853c78ca 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -454,10 +454,10 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "c75be1e28265a22887a5fd7ec59fd24e22c3471283c777ce7503bbebce753d6c" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f28f6d7fba60b2359c2a729032286f051f02308950093f4f0811b5863d53df9c" + "7fc059225e51317ee5bf131c03d54dda63852b0958cd65a5d0ef1cbeb36b8c5c" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "3b3869c29affa16b48df06b7cc888167e186aa88f5050ff053ab4cd01cc67a3e" + "f7b1d4db2ea0e08ca9be05e3f28b617111dc502f476d9491b3677982fc96f4ed" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -973,7 +973,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "be49af00334a04190c8dabed6f2c357304a00f69d7995dcbddea4785fd5452e2" + "01edad50629829155216ec25af4cb95dc4d88d5b8e4ff053822a77d4c70063e1" ), "policy_sha256": ( "e46455a5ef4e1d2902064c4cd352fd1f52523881932487b8f0c0c0c80e9ae7b1" diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index 54d362194e..f2220d4c9f 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -223,10 +223,10 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "c75be1e28265a22887a5fd7ec59fd24e22c3471283c777ce7503bbebce753d6c" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f28f6d7fba60b2359c2a729032286f051f02308950093f4f0811b5863d53df9c" + "7fc059225e51317ee5bf131c03d54dda63852b0958cd65a5d0ef1cbeb36b8c5c" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "3b3869c29affa16b48df06b7cc888167e186aa88f5050ff053ab4cd01cc67a3e" + "f7b1d4db2ea0e08ca9be05e3f28b617111dc502f476d9491b3677982fc96f4ed" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" From 7a95f37a77ed0c6c0d4d0250e9732625fb7fa45a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:02:24 +0000 Subject: [PATCH 34/39] Answer the independent review's gate and disclosure-floor findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Regional home values: the gate reads a banded count at its bounds, so a region of three to nine rows ("3-9") no longer crashes it, and the stage's own banded row count is read at its top (finding 1). - Pay concept ratio: the stage still holds a ratio on fewer than ten households to its bounds, now PAY_CONCEPT_RATIO_MINIMUM_SUPPORT, and the gate reads a ratio whose support band is under ten as unmeasured (2). - Take-up stage gates: a withheld share or target is flagged unchecked, never failed, as every sibling gate does under María's ruling of 2026-10-26; the terminal gate still measures it (8). - childcare_copy_take_up records the five flags it re-draws and a fourth assembled gate checks them, as María's "do both" ruling asks (9). - Tests: frs_take_up's receipt, the spine battery's stage_health binding on the take-up gates, the copy stage's gate, and banded home values counts (10). The engine-defaults guard also reads every stage's declared outputs and rewrites (5). - Floors of ten: the high-value-homes support gate and the three tools' SDC defaults move to three; the gambling prose follows; the statistical floors that stay say so. A second guard fails on any comparison, constant, default or prose that keeps a floor of ten outside the named statistical ones, across tools/** and microcosm-data too (11, 12). The gate battery and spine-part digests are re-pinned. Co-Authored-By: Claude Opus 5.5 --- ...095-uk-take-up-stage-signal-gates.added.md | 2 +- .../src/microcosm/build/uk/gates.json | 32 ++++++-- .../build/uk_runtime/calibration_run.py | 1 + .../uk_runtime/childcare_copy_take_up.py | 31 +++++++- .../build/uk_runtime/frs_annual_income.py | 11 ++- .../uk_runtime/gambling_participation.py | 2 +- .../build/uk_runtime/graph_kernels.py | 5 +- .../build/uk_runtime/high_value_home_gates.py | 2 +- .../uk_runtime/private_rent_localisation.py | 3 +- .../build/uk_runtime/spi_rank_transport.py | 4 +- .../build/uk_runtime/stage_health.py | 74 +++++++++++++----- .../engine_free/shared/test_country_spec.py | 2 + .../uk/test_uk_childcare_copy_take_up.py | 30 ++++++++ .../uk/test_uk_frame_linkage_preflight.py | 8 +- .../uk/test_uk_frs_annual_income.py | 20 ++++- .../engine_free/uk/test_uk_frs_stochastic.py | 17 +++- .../engine_free/uk/test_uk_receipt_counts.py | 77 ++++++++++++++++++- .../engine_free/uk/test_uk_stage_health.py | 31 +++++++- .../engine_free/uk/test_uk_take_up_gate.py | 70 ++++++++++++++++- .../engine_free/uk/test_uk_terminal_gates.py | 16 ++++ .../test_uk_weighted_integrity_measurement.py | 2 +- .../src/microcosm/data/contract.py | 13 ++-- .../tests/engine_free/shared/test_contract.py | 12 ++- tools/compare_uk_h5_payload.py | 6 +- ...measure_uk_weighted_integrity_baselines.py | 12 +-- tools/preflight_uk_frame_linkage.py | 5 +- 26 files changed, 417 insertions(+), 71 deletions(-) diff --git a/changelog.d/1095-uk-take-up-stage-signal-gates.added.md b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md index 4597811d88..700336d6e1 100644 --- a/changelog.d/1095-uk-take-up-stage-signal-gates.added.md +++ b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md @@ -1 +1 @@ -The twelve take-up flags the terminal uk_take_up_signal gate measures are checked at their drawing stages too: frs_take_up, frs_person_draws and frs_household_draws each record the drawn flags' shares at the stage's weights, and three assembled-phase stage-health gates hold them to their contract targets within the terminal gate's bounds, so a draw defect fails at its stage apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). +The twelve take-up flags the terminal uk_take_up_signal gate measures are checked at their drawing stages too: frs_take_up, frs_person_draws and frs_household_draws each record the drawn flags' shares at the stage's weights, childcare_copy_take_up records the five childcare flags it re-draws for the copies, and four assembled-phase stage-health gates hold them to their contract targets within the terminal gate's bounds, so a draw defect fails at its stage apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). A flag whose population rests on one or two source households is flagged unchecked at its stage, never failed (María's ruling of 2026-10-26); the terminal gate still measures it. diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index 170f17cfed..e624af9760 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -956,7 +956,7 @@ "person.max_free_entitlement_hours_used" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the six flags frs_take_up draws that the terminal uk_take_up_signal gate measures (Tax-Free Childcare, the extended, universal and targeted hours, the Universal Credit childcare element and the under-2 usage of the extended hours) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage, whose population is the children under 2 in units that claim the extended hours), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the six flags frs_take_up draws that the terminal uk_take_up_signal gate measures (Tax-Free Childcare, the extended, universal and targeted hours, the Universal Credit childcare element and the under-2 usage of the extended hours) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage, whose population is the children under 2 in units that claim the extended hours), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_frs_person_draws_take_up_signal", @@ -974,7 +974,7 @@ "person.would_claim_scp" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the Marriage Allowance and Scottish Child Payment flags frs_person_draws draws are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; the Scottish Child Payment target is the weighted mean of its under-6 and 6-plus rates). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the Marriage Allowance and Scottish Child Payment flags frs_person_draws draws are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; the Scottish Child Payment target is the weighted mean of its under-6 and 6-plus rates). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_frs_household_draws_take_up_signal", @@ -994,7 +994,29 @@ "household.property_purchased" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the four flags frs_household_draws draws (TV ownership, TV licence evasion, the first-home flag and the main-residence purchase flag) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), and the gate fails on it; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): the four flags frs_household_draws draws (TV ownership, TV licence evasion, the first-home flag and the main-residence purchase flag) are measured where they are drawn, at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05). Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + }, + { + "id": "uk_stage_childcare_copy_take_up_signal", + "gate": "stage_health", + "phase": "assembled", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "childcare_copy_take_up", + "check": "take_up_signal", + "maximum_share_deviation": 0.05, + "under_two_usage_maximum_share_deviation": 0.1, + "outputs": [ + "benunit.would_claim_tfc", + "benunit.would_claim_extended_childcare", + "benunit.would_claim_universal_childcare", + "benunit.would_claim_targeted_childcare", + "person.max_free_entitlement_hours_used" + ] + }, + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): childcare_copy_take_up re-draws five of the flags frs_take_up drew (Tax-Free Childcare, the extended, universal and targeted hours, and the under-2 usage of the extended hours) for the support and CGT copies on their own benefit units, so they are measured again after the re-draw, over the whole frame at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_isa_subscriptions_invariants", @@ -1800,11 +1822,11 @@ "phase": "terminal", "criticality": "diagnostic", "parameters": { - "minimum_distinct_sources": 10, + "minimum_distinct_sources": 3, "minimum_target_homes": 100.0, "dominance_share": 0.5 }, - "notes": "microcosm#1240 fix 8, report-only. For every constituency and local authority where the derived stock places at least 100 owner-occupied homes over 1.5m or over 2m, the pool must carry at least 10 distinct source households above the threshold with no source household above half of the cell (the UKDS disclosure floor the Budget-day outputs apply). The gate's details carry counts of areas by support band only; the per-area table is the candidate's high_value_home_support.csv, which stays in the run directory." + "notes": "microcosm#1240 fix 8, report-only. For every constituency and local authority where the derived stock places at least 100 owner-occupied homes over 1.5m or over 2m, the pool must carry at least three distinct source households above the threshold with no source household above half of the cell (UK_DISCLOSURE_FLOOR, CD171's absolute floor, to which María's ruling of 2026-10-29 moved every UK output, the Budget-day outputs included). The gate's details carry counts of areas by support band only; the per-area table is the candidate's high_value_home_support.csv, which stays in the run directory." } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py index eb9a067b26..4099ac44ba 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/calibration_run.py @@ -145,6 +145,7 @@ "uk_stage_frs_take_up_signal", "uk_stage_frs_person_draws_take_up_signal", "uk_stage_frs_household_draws_take_up_signal", + "uk_stage_childcare_copy_take_up_signal", "uk_stage_isa_subscriptions_invariants", "uk_stage_isa_subscriptions", # Weight-independent like the BRMA enum below, and its column exists from diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/childcare_copy_take_up.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/childcare_copy_take_up.py index e5f9ad19ba..48cc10a4ad 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/childcare_copy_take_up.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/childcare_copy_take_up.py @@ -33,7 +33,8 @@ from __future__ import annotations -from dataclasses import dataclass +from collections.abc import Mapping +from dataclasses import dataclass, field import numpy as np import pandas as pd @@ -51,6 +52,8 @@ derive_childcare_take_up, derive_under_two_childcare_usage, person_unit_flag, + take_up_signal_outputs, + uk_take_up_signal_receipt, ) from microcosm.build.uk_runtime.household_lineage import ( uk_household_clone_paths, @@ -89,6 +92,7 @@ class UKChildcareCopyTakeUpStageTransform: contract: UKTakeUpContract stage: SourceStageSpec + last_receipt: Mapping[str, object] | None = field(default=None, init=False) def __call__(self, frame: Frame) -> Frame: assert_universal_childcare_nesting_declaration(self.stage) @@ -99,12 +103,35 @@ def __call__(self, frame: Frame) -> Frame: f"stage {self.stage.stage!r} must declare the rewrites " f"{list(CHILDCARE_COPY_TAKE_UP_REWRITES)}; declared {list(declared)}" ) - return redraw_childcare_copy_take_up(frame, contract=self.contract) + result = redraw_childcare_copy_take_up(frame, contract=self.contract) + # The flags this stage re-draws, at its weights after the re-draw, for + # the stage-time take-up signal gate (María's ruling of 2026-10-29, + # microcosm#1095). + object.__setattr__( + self, + "last_receipt", + uk_take_up_signal_receipt( + result, + outputs=take_up_signal_outputs(CHILDCARE_COPY_TAKE_UP_REWRITES), + contract=self.contract, + ), + ) + return result @staticmethod def output_columns() -> tuple[str, ...]: return () + def checkpoint_metadata(self) -> dict[str, object]: + if self.last_receipt is None: + raise RuntimeError("checkpoint metadata requires a completed stage run.") + return { + "evidence": { + "stage": CHILDCARE_COPY_TAKE_UP_STAGE_NAME, + "take_up_signal": dict(self.last_receipt), + } + } + def copy_benunits( person: pd.DataFrame, benunit: pd.DataFrame, household: pd.DataFrame diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py index dc3658f858..5c07dbb3e0 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_annual_income.py @@ -227,6 +227,10 @@ MAXIMUM_UPRATING_MONTHS = 24 #: The ratio check: the job-level DV-to-usual pay ratio must lie in this range. PAY_CONCEPT_RATIO_BOUNDS = (0.95, 1.10) +#: The households the ratio needs before its bounds are judged: on fewer, a +#: ratio past them is noise, so it is held to them and its gate reads it +#: unmeasured. A statistical floor, not the disclosure floor. +PAY_CONCEPT_RATIO_MINIMUM_SUPPORT = 10 _ADULT_COLUMNS = ( "sernum", @@ -808,11 +812,12 @@ def pay_concept_ratio( ) ratio = float(np.nansum(job_weights * dv)) / denominator lower, upper = PAY_CONCEPT_RATIO_BOUNDS - if support < 10: + if support < PAY_CONCEPT_RATIO_MINIMUM_SUPPORT: # The bounds are a plausibility check on the two pay concepts. On one # to nine households a ratio past them is noise, so it is held to - # them rather than stopping the build, and it stays flagged as above - # (Vahid's second review of #1396). + # them rather than stopping the build (Vahid's second review of + # #1396), and the gate reads a ratio whose support band is under ten + # as unmeasured, whether or not the receipt prints it. return min(max(ratio, lower), upper), support if not lower <= ratio <= upper: raise ValueError( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py index 61dd8a1153..78bedd4efe 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py @@ -667,7 +667,7 @@ def top_up_gambling_participation( drawn = np.asarray(keys[key], dtype=float) donor_stakes = np.asarray(donor_keys[key], dtype=float) played = donor_stakes > 0 - # Fewer than ten donor households on a side only flags: the receipt + # Fewer than three donor households on a side only flags: the receipt # bands the fits' donor support and withholds what rests on them, and # a small-cell rule never stops a build (María's ruling of 2026-10-26). # The fit itself needs two on each side. diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py index d729275e03..ddb7c6bb34 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_kernels.py @@ -237,8 +237,9 @@ receipt_counts, ), # The copies' childcare re-draw draws through frs_take_up's childcare - # helper and reads each household's clone path. - "childcare_copy_take_up": (frs_take_up, household_lineage), + # helper, reads each household's clone path, and measures its flags for + # the stage-time signal gate by the shared disclosure rules (microcosm#1095). + "childcare_copy_take_up": (frs_take_up, household_lineage, receipt_counts), } _COMPUTE = Capabilities( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py index 58dbe2bf02..af59ceb01e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/high_value_home_gates.py @@ -631,7 +631,7 @@ def _band_counts( def high_value_home_support_gate( summary: Mapping[str, Any], *, - minimum_distinct_sources: int = 10, + minimum_distinct_sources: int = UK_DISCLOSURE_FLOOR, minimum_target_homes: float = 100.0, dominance_share: float = 0.5, ) -> GateResult: diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/private_rent_localisation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/private_rent_localisation.py index c6f19722db..60ae561250 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/private_rent_localisation.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/private_rent_localisation.py @@ -72,7 +72,8 @@ #: Below full scale, a region whose sample holds fewer FRS renters than this #: ranks against, and is scaled on, Great Britain's: a handful of renters is #: sampling noise, and its own scale could leave ``SCALE_BAND`` and refuse -#: (microcosm#1305 re-review). A full-scale build never falls back. +#: (microcosm#1305 re-review). A full-scale build never falls back. A +#: statistical floor, not the disclosure floor. MIN_SAMPLED_REGION_RENTERS = 10 PRIVATE_TENURE = "RENT_PRIVATELY" NORTHERN_IRELAND = "NORTHERN_IRELAND" diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py index b8f1316c9f..2ad5b666c6 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py @@ -88,7 +88,9 @@ #: Taxable savings interest on the twin: the FRS interest outside ISAs #: (microcosm#1360), the concept the tape's INCBBS leaf holds. TAXABLE_SAVINGS_INTEREST_ANALOGUE = "taxable_savings_interest" -#: Per-group uniformity is reported only over at least this many rows. +#: Per-group uniformity is reported only over at least this many rows: a +#: statistical floor, as a uniformity distance over fewer says nothing, not the +#: disclosure floor (receipt_counts.UK_DISCLOSURE_FLOOR). SPI_TRANSPORT_GROUP_MINIMUM_ROWS = 10 #: The reference forest is cross-fitted in this many folds keyed on the #: predictor cell; a frame with fewer distinct cells uses one fold per cell. diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index 1671a041ae..42c2a48371 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -1167,8 +1167,11 @@ def _take_up_signal_gate( must carry exactly the declared ``outputs``; each must vary, sit within the declared share deviation of its target (the under-2 usage row within its own bound) and, for the nested universal hours, have no benefit unit that - claims the extended hours without them. A share the receipt withholds - under the disclosure floor cannot be measured, so it fails. + claims the extended hours without them. A share or target the receipt + withholds, its population resting on one or two source households, cannot + be measured here: it is flagged, never failed (María's ruling of + 2026-10-26), and the terminal gate still measures it at the calibrated + weights. """ check = "take_up_signal" @@ -1190,6 +1193,7 @@ def _take_up_signal_gate( expected = [str(output) for output in declared] failures: list[str] = [] details: dict[str, object] = {} + withheld: list[str] = [] receipt = _mapping(evidence.get("take_up_signal"), label=f"{stage}.take_up_signal") rows = receipt.get("flags") if not isinstance(rows, list): @@ -1212,12 +1216,21 @@ def _take_up_signal_gate( if "unmeasured" in row: failures.append(f"{stage}: {output}: {row['unmeasured']}") continue + nested = row.get("extended_without_universal_units") + if nested is not None and nested != 0: + failures.append( + f"{stage}: {output}: {nested} benefit unit(s) claim the extended " + "hours without the universal hours." + ) share = row.get("weighted_share") target = row.get("target") + if UK_WITHHELD in (share, target): + withheld.append(output) + continue if not isinstance(share, int | float) or not isinstance(target, int | float): failures.append( - f"{stage}: {output}'s share or target is withheld ({share!r}, " - f"{target!r}): its population is too thin to measure at the stage." + f"{stage}: {output}'s share or target is not a measured share " + f"({share!r}, {target!r})." ) continue share = _finite_number(share, label=f"{stage}.{output}.weighted_share") @@ -1235,17 +1248,12 @@ def _take_up_signal_gate( f"{stage}: {output} is constant; a stochastic take-up draw must " "not collapse to a universal default." ) - nested = row.get("extended_without_universal_units") - if nested is not None and nested != 0: - failures.append( - f"{stage}: {output}: {nested} benefit unit(s) claim the extended " - "hours without the universal hours." - ) if deviation > limit: failures.append( f"{stage}: {output}'s weighted share {share:.4f} differs from its " f"contract target {target:.4f} by more than {limit}." ) + details["flags_withheld_unchecked"] = withheld return ( _fail(stage, check, failures, details) if failures @@ -1278,9 +1286,15 @@ def _frs_annual_income_spells_gate( than drawn from a donor. A ratio or share carried by fewer than three households, which the receipt prints "<3", is flagged unmeasured, never failed: a small-cell rule never stops a build (María's ruling of - 2026-10-26). + 2026-10-26). So is a pay concept ratio on fewer than ten households, which + the stage holds to its bounds as noise + (``frs_annual_income.PAY_CONCEPT_RATIO_MINIMUM_SUPPORT``). """ + from microcosm.build.uk_runtime.frs_annual_income import ( + PAY_CONCEPT_RATIO_MINIMUM_SUPPORT, + ) + check = "frs_annual_income_spells" failures: list[str] = [] for key in _ANNUAL_INCOME_STRUCTURAL_ZEROS: @@ -1299,7 +1313,13 @@ def _frs_annual_income_spells_gate( upper = _finite_number(bounds[1], label=f"{stage}.{bounds_key}[1]") value = evidence.get(key) details[key] = value - if value == UK_WITHHELD: + support = evidence.get("pay_concept_ratio_support") + held = ( + key == "pay_concept_ratio" + and support is not None + and _count_bounds(support)[1] < PAY_CONCEPT_RATIO_MINIMUM_SUPPORT + ) + if value == UK_WITHHELD or held: details[f"{key}_measured"] = False elif isinstance(value, bool) or not isinstance(value, int | float): failures.append(f"{stage}: {key} is {value!r}, not a measured ratio.") @@ -3874,8 +3894,8 @@ def _gambling_participation_gate( otherwise hide fails; the propensity must rest on ``required_support_band`` donors; and the excise levelling must have shared the bases by the topped-up keys, so each key is positive on the - twelve-month share. The receipt withholds a stratum with a cell under ten - source households, which the gate counts, and a key with such a cell + twelve-month share. The receipt withholds a stratum with a cell on one or + two source households, which the gate counts, and a key with such a cell nationally, which the gate names as unchecked: a small-cell rule flags and never stops a build (María's ruling of 2026-10-26). """ @@ -4547,21 +4567,21 @@ def _regional_home_values_gate( failures.append( f"{stage}: the receipt rewrites regions {sorted(rewritten)}, not {regions}." ) - # A region the receipt prints "<3" rewrote one or two rows: it is not - # empty, and it is flagged (a small-cell rule never fails a build, María's - # ruling of 2026-10-26). The sum check takes it at its lower bound. + # A count the receipt bands ("<3" for one or two rows, "3-9" for three to + # nine) is not empty, and the sum check takes it at its lower bound and the + # stage's own row count at its upper bound. A region printed "<3" is + # flagged (a small-cell rule never fails a build, María's ruling of + # 2026-10-26). banded = sorted( str(region) for region, count in rewritten.items() if count == UK_WITHHELD ) counts = { - str(region): 1 if count == UK_WITHHELD else int(count) - for region, count in rewritten.items() + str(region): _count_bounds(count)[0] for region, count in rewritten.items() } empty = sorted(region for region, count in counts.items() if count <= 0) if empty: failures.append(f"{stage}: no row is rewritten in {empty}.") - rows = evidence.get("rows", 0) - if rows != UK_WITHHELD and sum(counts.values()) > int(rows): + if sum(counts.values()) > _count_bounds(evidence.get("rows", 0))[1]: failures.append(f"{stage}: more rows are rewritten than the stage carries.") at_cap = evidence.get("sources_at_cap", -1) maximum_at_cap = int(parameters["maximum_sources_at_cap"]) @@ -4618,6 +4638,18 @@ def _regional_home_values_gate( } +def _count_bounds(count: object) -> tuple[float, float]: + """The lowest and highest counts a receipt's count stands for: a band's + bounds, or the count itself.""" + + if isinstance(count, str): + if count not in _SUPPORT_BAND_BOUNDS: + raise ValueError(f"unknown count band {count!r}.") + return _SUPPORT_BAND_BOUNDS[count] + value = int(count) + return value, value + + def _legacy_closure_take_up_gate( stage: str, evidence: Mapping[str, object], diff --git a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py index 47c390bbab..c291b0e932 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py @@ -1487,6 +1487,7 @@ def test_declares_the_full_june_battery(self, manifest) -> None: "uk_stage_frs_take_up_signal", "uk_stage_frs_person_draws_take_up_signal", "uk_stage_frs_household_draws_take_up_signal", + "uk_stage_childcare_copy_take_up_signal", "uk_stage_isa_subscriptions_invariants", "uk_stage_isa_subscriptions", "uk_release_input_coverage", @@ -1624,6 +1625,7 @@ def test_strict_absent_evidence_entries_are_declared(self, manifest) -> None: "uk_stage_frs_take_up_signal", "uk_stage_frs_person_draws_take_up_signal", "uk_stage_frs_household_draws_take_up_signal", + "uk_stage_childcare_copy_take_up_signal", "uk_stage_isa_subscriptions_invariants", "uk_stage_isa_subscriptions", "uk_weights_audit", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py index 65047752f1..2ee8614ff4 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py @@ -351,3 +351,33 @@ def test_copies_children_redraw_their_under_two_usage_on_their_own_draws() -> No contract.rate("extended_childcare_age_1_usage"), abs=0.03 ) assert (after.loc[~under_two, UK_UNDER_TWO_USAGE_OUTPUT] == 30.0).all() + + +def test_stage_records_the_redrawn_flags_for_its_signal_gate() -> None: + """The copy stage measures the five flags it re-draws over the whole frame, + after the re-draw, for the stage-time take-up signal gate (microcosm#1095).""" + from microcosm.build import load_country_spec + from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate + + contract = load_uk_take_up_contract() + stage = UKChildcareCopyTakeUpStageTransform(contract=contract, stage=_stage()) + with pytest.raises(RuntimeError, match="completed stage run"): + stage.checkpoint_metadata() + stage(_frame(contract)) + evidence = stage.checkpoint_metadata()["evidence"] + assert evidence["stage"] == "childcare_copy_take_up" + gate = next( + entry + for entry in load_country_spec("uk").gates.gates + if entry.id == "uk_stage_childcare_copy_take_up_signal" + ) + assert [row["output"] for row in evidence["take_up_signal"]["flags"]] == list( + gate.parameters["outputs"] + ) + result = uk_stage_health_gate( + evidence=evidence, + stage="childcare_copy_take_up", + check="take_up_signal", + parameters=dict(gate.parameters), + ) + assert not any("omits" in f or "undeclared" in f for f in result.failures) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frame_linkage_preflight.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frame_linkage_preflight.py index b1014e291f..af255ff109 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frame_linkage_preflight.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frame_linkage_preflight.py @@ -235,7 +235,7 @@ def test_main_reports_both_artifacts_and_exits_nonzero_on_failure( assert exit_code == 1 report = json.loads(captured.out) - assert report["sdc_minimum_count"] == 10 + assert report["sdc_minimum_count"] == 3 constructed = { Path(artifact["path"]).name: artifact["frame_constructed"] for artifact in report["artifacts"] @@ -413,7 +413,7 @@ def test_malformed_weight_is_sanitized_and_later_artifact_is_still_audited( first, second = report["artifacts"] assert Path(first["path"]).name == malformed.name assert first["audit_completed"] is True - assert first["household_weights"]["conversion_failures"] == "< 10" + assert first["household_weights"]["conversion_failures"] == "< 3" assert first["frame_constructed"] is False assert first["frame_construction_failure_reason"] == ( "Frame rejects non-numeric household weights." @@ -442,7 +442,7 @@ def test_non_finite_weight_emits_strict_json_without_exact_total( assert exit_code == 1 report = _strict_json_loads(captured.out) weights = report["artifacts"][0]["household_weights"] - assert weights["non_finite"] == "< 10" + assert weights["non_finite"] == "< 3" assert weights["total_mass"] is None _strict_json_loads(json_out.read_text()) assert "Infinity" not in captured.out @@ -504,7 +504,7 @@ def test_split_benunit_fails_preflight_even_when_frame_constructs( artifact = _strict_json_loads(captured.out)["artifacts"][0] assert artifact["frame_constructed"] is True assert artifact["frame_construction_failure_reason"] is None - assert artifact["linkage"]["split_benunits"] == "< 10" + assert artifact["linkage"]["split_benunits"] == "< 3" assert artifact["preflight_passed"] is False assert artifact["preflight_failure_reasons"] == [ "Benunits span multiple households." diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py index 46808db62b..f2c8639381 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py @@ -490,7 +490,10 @@ def test_gate_passes_the_stages_own_receipt() -> None: ], ) def test_gate_fails_closed(key: str, value: object, message: str) -> None: - gate = _gate({**_leaver_evidence(), key: value}) + # A measured ratio rests on ten or more households. + gate = _gate( + {**_leaver_evidence(), "pay_concept_ratio_support": "10-29", key: value} + ) assert not gate.passed assert any(message in failure for failure in gate.failures), gate.failures @@ -556,6 +559,21 @@ def test_gate_flags_a_ratio_on_fewer_than_three_households(key: str) -> None: assert gate.details[f"{key}_measured"] is False +@pytest.mark.parametrize(("support", "measured"), [("3-9", False), ("10-29", True)]) +def test_gate_reads_a_ratio_held_to_its_bounds_unmeasured(support, measured) -> None: + """The stage holds a ratio on fewer than ten households to its bounds, so + the gate cannot judge it, though the receipt prints it from three up.""" + gate = _gate( + { + **_leaver_evidence(), + "pay_concept_ratio": 1.10, + "pay_concept_ratio_support": support, + } + ) + assert gate.passed, gate.failures + assert gate.details.get("pay_concept_ratio_measured", True) is measured + + def _stage(**overrides) -> SourceStageSpec: operations = tuple( SourceOperationSpec(kind=kind, parameters=parameters) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py index 13da07292a..c8a6538407 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_stochastic.py @@ -13,11 +13,24 @@ def test_take_up_anchor_missing_source_column_fails_loud() -> None: def test_take_up_anchors_or_over_persons_and_stage_writes_outputs() -> None: + from microcosm.build.uk_runtime.frs_take_up import take_up_signal_outputs + frame = _frame() - transformed = UKFRSTakeUpStageTransform( + stage = UKFRSTakeUpStageTransform( contract=_Contract(), stage=_take_up_stage(), population_policy=_POLICY - )(frame) + ) + transformed = stage(frame) benunit = transformed.table("benunit") + # The receipt carries the take-up flags the stage draws, for its stage-time + # signal gate (microcosm#1095). + evidence = stage.checkpoint_metadata()["evidence"] + assert evidence["stage"] == "frs_take_up" + assert [row["output"] for row in evidence["take_up_signal"]["flags"]] == [ + f"{entity}.{output}" + for entity, output, _ in take_up_signal_outputs( + UKFRSTakeUpStageTransform.output_columns() + ) + ] anchors = aggregate_person_reported_to_benunit( frame.table("person"), frame.table("benunit") diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py index e45d2f3a9a..3a81171215 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py @@ -97,13 +97,88 @@ def test_no_uk_output_still_withholds_at_ten() -> None: *(build / "uk").glob("*.py"), *(build / "uk" / "spec").glob("*.yaml"), build / "uk" / "gates.json", - *(root / "tools").glob("*.py"), + *(root / "tools").rglob("*.py"), + *(paths_for("microcosm-data").package / "src").rglob("*.py"), ) if label.search(path.read_text(encoding="utf-8")) ) assert writers == [] +#: Floors of ten that are not the disclosure floor, each with the text that +#: names it on its line: statistical floors (too few rows to measure what the +#: figure measures), and lines that describe the old floor as history. +_KEPT_TENS = { + "uk_runtime/frs_annual_income.py": ( + "PAY_CONCEPT_RATIO_MINIMUM_SUPPORT = 10", + "support band is under ten", + ), + "uk_runtime/stage_health.py": ("pay concept ratio on fewer than ten",), + "uk_runtime/spi_rank_transport.py": ("SPI_TRANSPORT_GROUP_MINIMUM_ROWS = 10",), + "uk_runtime/private_rent_localisation.py": ("MIN_SAMPLED_REGION_RENTERS = 10",), + "uk_runtime/frs_education.py": ("AGE_LEFT_FULL_TIME_EDUCATION_MIN = 10",), + "uk_runtime/frs_spine.py": ("fewer than ten code-6 amounts",), + "uk_runtime/orrery_contract.py": ( + "no longer marks the rows resting on fewer than ten", + ), + "uk_runtime/support_floor.py": ("rests on fewer than ten records is no reason",), + "uk/spec/sources.yaml": ("over at least 10 rows",), + "tools/measure_uk_spi_half_coherence.py": ("MIN_CELL = 10",), + "tools/uk_private_rent_receipt.py": ( + "MIN_GROUP_CELLS = 10", + "fewer than ten published rows", + ), +} + + +def test_no_uk_floor_of_ten_hides_outside_the_label() -> None: + """The "<10" label is only one way to keep a floor of ten: a comparison + with ten, a constant or a default of ten, or prose saying "fewer than ten" + is another (the review of microcosm#1422). Each that is left is a + statistical floor or history, named in ``_KEPT_TENS``.""" + + root = paths_for("microcosm-build").repository + build = paths_for("microcosm-build").package / "src" / "microcosm" / "build" + floors = re.compile( + r"\b\w*(?:support|sources?|count|households|donors|carriers|rows|cells)" + r"\w*\)?\s*<\s*10\b(?!\.\d)" + r"|^\s*_?[A-Z0-9_]*(?:MIN|FLOOR|SDC|SMALL)[A-Z0-9_]*\s*(?::[^=\n]+)?=\s*10\b" + r"|\bminimum_\w*\s*:\s*int\s*=\s*10\b" + r"|\b(?:fewer than|under|below|less than) (?:ten|10 (?:rows|records|households" + r"|source households|sources|donors))\b|\bone to nine\b" + r"|\bat least 10 (?:rows|records|households|sources|donors)\b" + r'|"minimum_\w*":\s*10\b', + re.IGNORECASE | re.MULTILINE, + ) + paths = ( + *(build / "uk_runtime").rglob("*.py"), + *(build / "uk").glob("*.py"), + *(build / "uk" / "spec").glob("*.yaml"), + build / "uk" / "gates.json", + *(root / "tools").rglob("*.py"), + *(paths_for("microcosm-data").package / "src").rglob("*.py"), + ) + found = [] + for path in paths: + text = path.read_text(encoding="utf-8") + name = path.relative_to(root).as_posix() + kept = next( + ( + needles + for suffix, needles in _KEPT_TENS.items() + if name.endswith(suffix) + ), + (), + ) + for match in floors.finditer(text): + line = text[ + text.rfind("\n", 0, match.start()) + 1 : text.find("\n", match.end()) + ] + if not any(needle in line for needle in kept): + found.append(f"{name}: {line.strip()[:120]}") + assert found == [] + + def test_counts_refuse_a_negative_count() -> None: with pytest.raises(ValueError, match="negative"): rounded_count(-1) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py index 9da713ef8d..d541d8197c 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py @@ -2784,7 +2784,8 @@ def _home_values_receipt() -> dict: return { "stage": "regional_home_values", "rows": 100, - "rows_rewritten_by_region": {region: 5 for region in regions}, + # Counts as the receipt prints them (receipt_counts.rounded_count). + "rows_rewritten_by_region": {region: 10 for region in regions}, "sources_at_cap": 0, "knots_basis_year": 2024, "ranking": {"rank_basis": "weighted_midpoint_within_frs_region"}, @@ -2798,7 +2799,7 @@ def _home_values_receipt() -> dict: [ (lambda r: r["rows_rewritten_by_region"].pop("W92000004"), "rewrites regions"), (lambda r: r["rows_rewritten_by_region"].update(E12000007=0), "no row"), - (lambda r: r.update(rows=40), "more rows"), + (lambda r: r.update(rows=90), "more rows"), (lambda r: r.update(sources_at_cap=1), "value cap"), # A band past the limit fails as plainly as the count it stands for. (lambda r: r.update(sources_at_cap="<3"), "value cap"), @@ -2829,6 +2830,32 @@ def test_regional_home_values_gate_flags_a_region_of_fewer_than_three_rows() -> assert result.details["sources_at_cap_unchecked"] is False +def test_regional_home_values_gate_reads_a_banded_count_at_its_bounds() -> None: + """A region the receipt prints "3-9" rewrote three to nine rows: not empty, + above the floor, so not flagged, and read at three in the sum check, as the + stage's own banded row count is read at its upper bound.""" + gate_id = "uk_stage_regional_home_values_ranking" + receipt = _home_values_receipt() + receipt["rows_rewritten_by_region"]["W92000004"] = "3-9" + result = _gate(gate_id, receipt) + assert result.passed, result.failures + assert result.details["regions_rewritten_under_floor"] == [] + # Nine regions of ten and one of at least three: 93 rows at the least. + receipt["rows"] = 92 + assert "more rows" in _gate(gate_id, receipt).failures[0] + receipt["rows"] = 93 + assert _gate(gate_id, receipt).passed + # A stage whose own count is banded is read at the band's top. + small = _home_values_receipt() + small["rows_rewritten_by_region"] = { + region: "<3" for region in small["rows_rewritten_by_region"] + } + small["rows"] = 20 + assert _gate(gate_id, small).passed + small["rows"] = "3-9" + assert "more rows" in _gate(gate_id, small).failures[0] + + def _legacy_closure_receipt() -> dict: return { "stage": "uc_legacy_closure_take_up", diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py index ae70f0eaa0..684e412762 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py @@ -244,6 +244,7 @@ def test_take_up_gate_holds_under_two_usage_to_its_own_bound() -> None: "frs_take_up": "uk_stage_frs_take_up_signal", "frs_person_draws": "uk_stage_frs_person_draws_take_up_signal", "frs_household_draws": "uk_stage_frs_household_draws_take_up_signal", + "childcare_copy_take_up": "uk_stage_childcare_copy_take_up_signal", } @@ -340,14 +341,30 @@ def test_stage_receipt_measures_drawn_flags_and_withholds_thin_populations() -> ) usage = rows["person.max_free_entitlement_hours_used"] # Two children in two households: below the disclosure floor, so neither - # the share nor the age-weighted target is given, and the gate fails. + # the share nor the age-weighted target is given, and the gate flags the + # flag unchecked rather than failing (María's ruling of 2026-10-26); the + # terminal gate still measures it at the calibrated weights. assert usage["under_two_usage"] is True assert usage["weighted_share"] == "<3" assert usage["target"] == "<3" result = _stage_gate("frs_take_up", receipt) - assert result.passed is False - assert any("max_free_entitlement_hours_used" in f for f in result.failures) - assert all("withheld" in f for f in result.failures) + assert result.passed is True, result.failures + assert result.details["flags_withheld_unchecked"] == [ + "person.max_free_entitlement_hours_used" + ] + # A share that is neither measured nor withheld still fails. + broken = { + **receipt, + "flags": [ + {**row, "weighted_share": "n/a"} + if row["output"] == "benunit.would_claim_tfc" + else row + for row in receipt["flags"] + ], + } + assert any( + "not a measured share" in f for f in _stage_gate("frs_take_up", broken).failures + ) def test_stage_take_up_signal_gate_passes_and_names_each_defect() -> None: @@ -391,3 +408,48 @@ def test_household_draw_stage_records_its_take_up_receipt() -> None: assert [row["output"] for row in evidence["take_up_signal"]["flags"]] == list( _stage_gate_parameters("frs_household_draws")["outputs"] ) + + +def test_the_copy_stage_checks_the_childcare_flags_it_redraws() -> None: + """childcare_copy_take_up re-draws five of frs_take_up's flags for the + copies, so its own stage gate measures them again after the re-draw.""" + from microcosm.build.uk_runtime.childcare_copy_take_up import ( + CHILDCARE_COPY_TAKE_UP_REWRITES, + ) + from microcosm.build.uk_runtime.frs_take_up import take_up_signal_outputs + + redrawn = take_up_signal_outputs(CHILDCARE_COPY_TAKE_UP_REWRITES) + assert set(redrawn) <= set(_stage_signal_outputs()["frs_take_up"]) + parameters = _stage_gate_parameters("childcare_copy_take_up") + assert parameters["stage"] == "childcare_copy_take_up" + assert parameters["check"] == "take_up_signal" + assert list(parameters["outputs"]) == [ + f"{entity}.{output}" for entity, output, _ in redrawn + ] + assert parameters["maximum_share_deviation"] == 0.05 + assert parameters["under_two_usage_maximum_share_deviation"] == 0.1 + + +def test_the_spine_battery_runs_each_take_up_stage_gate() -> None: + """Each stage-time take-up gate is in the spine battery's scope and runs + through the battery's stage_health binding on its stage's receipt.""" + from microcosm.build.uk_runtime.calibration_run import UK_SPINE_GATE_SCOPE + + frame = _frame() + drawing = ("frs_take_up", "frs_person_draws", "frs_household_draws") + evidence = { + stage: {"stage": stage, "take_up_signal": _receipt(frame, stage)} + for stage in drawing + } + binding = UK_GATE_REGISTRY["stage_health"] + for stage, gate_id in _SIGNAL_STAGE_GATES.items(): + assert gate_id in UK_SPINE_GATE_SCOPE + parameters = _stage_gate_parameters(stage) + assert set(parameters) <= binding.parameter_keys + if stage not in evidence: + # The copy stage's receipt needs copies: its own test runs it. + continue + result = binding.evaluator( + EvidenceContext(artifacts={"stage_evidence": evidence}), parameters + ) + assert result.passed, (stage, result.failures) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py index 56315b86a6..a10cc108e3 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_terminal_gates.py @@ -511,6 +511,22 @@ def test_no_spine_column_writes_an_input_signed_at_the_engine_default() -> None: ) written = {column for dtypes in schema["dtypes"].values() for column in dtypes} assert "self_employment_income" in written + # A stage's declared outputs and rewrites count too: the H2 fixture holds + # only the root sources' columns, and a later stage may write an input + # (the review of microcosm#1422). + stages = json.loads( + ( + paths_for("microcosm-build").package + / "src/microcosm/build/uk/source_stages.json" + ).read_text() + )["stages"] + written |= { + column + for stage in stages + for key in ("outputs", "rewrites") + for column in stage.get(key, ()) + } + assert "would_claim_tfc" in written assert not written & set(UK_ENGINE_DEFAULT_INPUTS) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_weighted_integrity_measurement.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_weighted_integrity_measurement.py index 50474fb11a..92f5c60e97 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_weighted_integrity_measurement.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_weighted_integrity_measurement.py @@ -136,7 +136,7 @@ def test_minimum_count_below_the_standard_floor_is_refused( def test_default_minimum_count_follows_the_secondary_disclosure_advice() -> None: - assert MEASUREMENT.DEFAULT_SDC_MINIMUM_COUNT == 10 + assert MEASUREMENT.DEFAULT_SDC_MINIMUM_COUNT == 3 assert all(k >= 10 for k in MEASUREMENT.DEFAULT_TOP_K_GRID) diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 35853c78ca..9406820064 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -451,13 +451,13 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "c75be1e28265a22887a5fd7ec59fd24e22c3471283c777ce7503bbebce753d6c" + "8621ac53daca32c6222cc2601ab8d33260ceaddbcc092235f39b5203c0c32657" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "7fc059225e51317ee5bf131c03d54dda63852b0958cd65a5d0ef1cbeb36b8c5c" + "b0e9b4402bdc5faaeca9e5ad673b1a14fa47b16ad4bf05f054e5ff5141845470" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f7b1d4db2ea0e08ca9be05e3f28b617111dc502f476d9491b3677982fc96f4ed" + "ef310a3ad280d052ef446bd9f8126c66fd31e27c3dc5951bdb191435546c0be2" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -564,6 +564,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_frs_take_up_signal": ("stage_health", "assembled"), "uk_stage_frs_person_draws_take_up_signal": ("stage_health", "assembled"), "uk_stage_frs_household_draws_take_up_signal": ("stage_health", "assembled"), + "uk_stage_childcare_copy_take_up_signal": ("stage_health", "assembled"), "uk_stage_age_tail_targets": ("stage_health", "assembled"), "uk_stage_frs_relationships_composition": ("stage_health", "assembled"), "uk_ledger_compile_parity_local_incumbent_2025": ( @@ -676,6 +677,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_frs_take_up_signal", "uk_stage_frs_person_draws_take_up_signal", "uk_stage_frs_household_draws_take_up_signal", + "uk_stage_childcare_copy_take_up_signal", "uk_stage_age_tail_targets", "uk_stage_frs_relationships_composition", "uk_cgt_projection_entrants", @@ -900,6 +902,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: "uk_stage_frs_take_up_signal", "uk_stage_frs_person_draws_take_up_signal", "uk_stage_frs_household_draws_take_up_signal", + "uk_stage_childcare_copy_take_up_signal", "uk_stage_frs_relationships_composition", "uk_stage_high_value_home_support_mass", "uk_stage_hmrc_cgt_asset_type_spine_summary", @@ -973,10 +976,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "01edad50629829155216ec25af4cb95dc4d88d5b8e4ff053822a77d4c70063e1" + "b38e9d15691e80abd532ddce32076a8bb40f943e01213f6f99271ca49a2ee33a" ), "policy_sha256": ( - "e46455a5ef4e1d2902064c4cd352fd1f52523881932487b8f0c0c0c80e9ae7b1" + "270d09ffaeb0c4d45ed35aeef709d39da932815f11793dbdaacba8492fc86601" ), }, "calibration_seam": { diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index f2220d4c9f..62f2a37973 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -220,13 +220,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "c75be1e28265a22887a5fd7ec59fd24e22c3471283c777ce7503bbebce753d6c" + "8621ac53daca32c6222cc2601ab8d33260ceaddbcc092235f39b5203c0c32657" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "7fc059225e51317ee5bf131c03d54dda63852b0958cd65a5d0ef1cbeb36b8c5c" + "b0e9b4402bdc5faaeca9e5ad673b1a14fa47b16ad4bf05f054e5ff5141845470" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f7b1d4db2ea0e08ca9be05e3f28b617111dc502f476d9491b3677982fc96f4ed" + "ef310a3ad280d052ef446bd9f8126c66fd31e27c3dc5951bdb191435546c0be2" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" @@ -384,6 +384,11 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "assembled", None, ), + "uk_stage_childcare_copy_take_up_signal": ( + "stage_health", + "assembled", + None, + ), "uk_stage_hmrc_cgt_asset_type_spine_summary": ( "stage_health", "transferred", @@ -1462,6 +1467,7 @@ def _gate_battery_payload( "uk_stage_frs_take_up_signal": "frs_take_up", "uk_stage_frs_person_draws_take_up_signal": "frs_person_draws", "uk_stage_frs_household_draws_take_up_signal": "frs_household_draws", + "uk_stage_childcare_copy_take_up_signal": "childcare_copy_take_up", "uk_stage_age_tail_targets": "age_tail", "uk_stage_frs_relationships_composition": "frs_relationships", } diff --git a/tools/compare_uk_h5_payload.py b/tools/compare_uk_h5_payload.py index 9dc320da80..4f726e6d62 100644 --- a/tools/compare_uk_h5_payload.py +++ b/tools/compare_uk_h5_payload.py @@ -41,10 +41,12 @@ import numpy as np import pandas as pd -DEFAULT_SDC_MINIMUM_COUNT = 10 # CD171 §5.2.1: cells based on one or two cases are never reportable. Callers -# may raise the threshold, never lower it. +# may raise the threshold, never lower it. The default is that floor, to which +# María's ruling of 2026-10-29 moved every UK output +# (microcosm.build.uk_runtime.receipt_counts.UK_DISCLOSURE_FLOOR). MINIMUM_SDC_COUNT = 3 +DEFAULT_SDC_MINIMUM_COUNT = MINIMUM_SDC_COUNT def _validated_sdc_minimum(minimum: int) -> int: diff --git a/tools/measure_uk_weighted_integrity_baselines.py b/tools/measure_uk_weighted_integrity_baselines.py index a470241dec..e883b4fdd4 100644 --- a/tools/measure_uk_weighted_integrity_baselines.py +++ b/tools/measure_uk_weighted_integrity_baselines.py @@ -49,6 +49,7 @@ uk_hmrc_weighted_qrf_output_columns, ) from microcosm.build.uk_runtime.national_frame import load_uk_national_frame +from microcosm.build.uk_runtime.receipt_counts import UK_DISCLOSURE_FLOOR from microcosm.build.uk_runtime.was_wealth import UK_WAS_WEALTH_HOUSEHOLD_OUTPUT_COLUMNS from microcosm.build.uk_runtime.weighted_integrity import ( uk_input_mass_totals, @@ -57,12 +58,11 @@ DEFAULT_TOP_K_GRID = (10, 100, 500, 1000) # CD171-ResearchDataHandling §5.2.1: cells based on one or two cases are never -# reportable (minimum threshold of 3), and 10 is advised where several outputs -# come from the same source — which is exactly this file. No study the build -# reads sets a higher minimum (microcosm.build.uk_runtime.receipt_counts); -# raise this with --sdc-minimum-count if a study's Special Conditions (EUL -# clause 3) ever do. -DEFAULT_SDC_MINIMUM_COUNT = 10 +# reportable. María's ruling of 2026-10-29 moved every UK output to that floor +# of three (receipt_counts.UK_DISCLOSURE_FLOOR), this file's included; raise +# it with --sdc-minimum-count if a study's Special Conditions (EUL clause 3) +# ever set a higher one. +DEFAULT_SDC_MINIMUM_COUNT = UK_DISCLOSURE_FLOOR UK_WAS_HOUSEHOLD_WEIGHTED_INTEGRITY_COLUMNS = UK_WAS_WEALTH_HOUSEHOLD_OUTPUT_COLUMNS diff --git a/tools/preflight_uk_frame_linkage.py b/tools/preflight_uk_frame_linkage.py index e5ff8da76e..ec2b815008 100644 --- a/tools/preflight_uk_frame_linkage.py +++ b/tools/preflight_uk_frame_linkage.py @@ -59,12 +59,13 @@ GROUP_ENTITIES = ("benunit", "household") UK_SCHEMA = EntitySchema(group_entities=GROUP_ENTITIES) _TABLES = ("person", *GROUP_ENTITIES) -DEFAULT_SDC_MINIMUM_COUNT = 10 # CD171-ResearchDataHandling §5.2.1: cells based on one or two cases are # never reportable. Keep this as the single authority for every entry point; # callers may raise the threshold (including to a study-specific 30), but -# cannot lower it. +# cannot lower it. The default is that floor, to which María's ruling of +# 2026-10-29 moved every UK output (receipt_counts.UK_DISCLOSURE_FLOOR). MINIMUM_SDC_COUNT = 3 +DEFAULT_SDC_MINIMUM_COUNT = MINIMUM_SDC_COUNT def _validated_sdc_minimum(minimum: int) -> int: From 42913ab5e8bf6144fca74b29b0bad2f28010b179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:02:24 +0000 Subject: [PATCH 35/39] Keep observation periods with their rows and one window series per member - restamp_reference_period moves a declared observation_period by the same years as the target period, so the eight DfE rows read the January census after whatever model year they are restamped to: the calibration compile, the local compile and the childcare fit tool, whose --target-period and --vintage-override now select the matching census (finding 3). - A calendar-year window over several pinned members needs one complete series per member: two series of one service and none of the other no longer compile (6). - The complement's metadata gives its value back: the recorded numerator is the denominator less the cells, and the formula reads numerator / denominator (14). Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/ledger_targets.py | 92 +++++++++++++++++-- .../build/uk_runtime/ledger_targets.py | 9 +- .../engine_free/shared/test_ledger_targets.py | 62 ++++++++++++- .../uk/test_uk_target_references.py | 15 ++- tools/fit_uk_childcare_takeup.py | 4 +- 5 files changed, 158 insertions(+), 24 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 13d7824f55..9a0a307659 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -980,8 +980,10 @@ def target_spec_from_ledger_reference( reference, [base, numerator, denominator] ) if complement: + # The recorded numerator is the complement itself, so the formula + # reads numerator / denominator (the review of microcosm#1422). ratio_metadata["ledger_value_numerator_rule"] = ( - "denominator less the numerator cells" + "the denominator less the listed numerator cells" ) value_metadata = { **_calendar_year_window_metadata(reference, window), @@ -4323,6 +4325,28 @@ def _resolve_calendar_year_window_reference_facts( f"needs both years opening in {sorted(wanted)} from {series_phrase}; " f"{len(complete)} of {len(partitions)} matched series carry both." ) + if expected_series > 1: + # Each declared member carries exactly one series: two series of one + # member and none of another would pass the count alone (the review + # of microcosm#1422), as the ratio operands' members are checked. + members: dict[tuple[str, ...], int] = {} + for years in complete.values(): + member = _calendar_year_window_member( + next(iter(years.values()))[0], reference + ) + members[member] = members.get(member, 0) + 1 + if len(members) != expected_series or any( + count != 1 for count in members.values() + ): + found = ", ".join( + f"{'/'.join(member)} x{count}" + for member, count in sorted(members.items()) + ) + raise ValueError( + f"Ledger target reference {reference.name!r}: calendar_year_window " + f"needs one series per declared selector member ({expected_series}); " + f"the complete series stand for {found}." + ) resolved: list[object] = [] for key in sorted(complete): years = complete[key] @@ -4364,6 +4388,27 @@ def _calendar_year_window_series_count(reference: LedgerTargetReference) -> int: return count +def _calendar_year_window_member( + fact: object, reference: LedgerTargetReference +) -> tuple[str, ...]: + """The declared selector member a series stands for: its value of each + list-valued source key and of each dimension pinned to several values.""" + + selector = reference.ledger_selector or {} + member: list[str] = [] + for key in _CALENDAR_YEAR_WINDOW_SERIES_KEYS: + declared = selector.get(key) + if isinstance(declared, (list, tuple)): + candidates = {str(value) for value in _selector_candidates(fact, key)} + member.append( + ",".join(sorted(str(v) for v in declared if str(v) in candidates)) + ) + dimensions = _dimensions(fact) + for name in _calendar_year_window_listed_dimensions(reference): + member.append(f"{name}={dimensions.get(name, '')}") + return tuple(member) + + def _calendar_year_window_listed_dimensions( reference: LedgerTargetReference, ) -> tuple[str, ...]: @@ -4619,6 +4664,45 @@ def _count_mean_fact_role(fact: object) -> str: return "" +def restamp_reference_period( + reference: LedgerTargetReference, period: int | str +) -> LedgerTargetReference: + """The reference measured at another target period. + + A declared ``observation_period`` keeps its offset from the target period: + a row that reads DfE's January census after its model year reads the + census after the new one. Restamping only ``period`` left every such row + on the census it was written for (the review of microcosm#1422). + """ + + if reference.observation_period is None: + return replace(reference, period=period) + if reference.period is None: + raise ValueError( + f"LedgerTargetReference {reference.name!r}: an observation_period " + "needs a target period to keep its offset from." + ) + shift = _period_year(period) - _period_year(reference.period) + return replace( + reference, + period=period, + observation_period=_shift_period_years(reference.observation_period, shift), + ) + + +def _period_year(period: int | str) -> int: + return _period_key_from_value(period)[1] // 100 + + +def _shift_period_years(period: int | str, years: int) -> int | str: + if isinstance(period, int): + return period + years + match = re.fullmatch(r"(\d{4})(.*)", str(period).strip()) + if match is None: + raise ValueError(f"cannot move the period {period!r} by {years} year(s).") + return f"{int(match.group(1)) + years}{match.group(2)}" + + def _selection_period(reference: LedgerTargetReference) -> int | str | None: """The period a reference selects its facts at: its observation period if it declares one, else its target period.""" @@ -5157,11 +5241,7 @@ def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]: target_year = _calendar_year_from_reference(reference) metadata["ledger_value_formula"] = ( f"(3/12 * FY{target_year - 1} + 9/12 * FY{target_year}) " - + ( - "* (denominator - numerator) / denominator" - if _window_ratio_numerator_is_complement(reference) - else "* numerator / denominator" - ) + "* numerator / denominator" ) if reference.value_operation == "linear_combination": metadata["ledger_value_formula"] = _linear_combination_formula(reference) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py index 9d20d11531..ba756262ce 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py @@ -29,6 +29,7 @@ _source_name, compile_ledger_target_references, reference_fact_selectors, + restamp_reference_period, ) from microcosm.build.target_materialization import ( ENGINE_PERIOD_COLUMN_PREFIX, @@ -490,9 +491,7 @@ def compile_uk_target_registry( compiled = [] unsupported: list[dict[str, str]] = [] for reference in spec.target_references: - restamped = LedgerTargetReference( - **{**reference.__dict__, "period": target_period} - ) + restamped = restamp_reference_period(reference, target_period) candidate_facts = _candidate_facts_for_reference( fact_rows, restamped, fact_indices_by_source=fact_indices_by_source ) @@ -1428,9 +1427,7 @@ def compile_uk_local_target_registry( compiled = [] unsupported: list[dict[str, str]] = [] for reference in spec.local_target_references: - restamped = LedgerTargetReference( - **{**reference.__dict__, "period": target_period} - ) + restamped = restamp_reference_period(reference, target_period) _assert_local_reference_in_crosswalk(restamped, rosters) candidate_facts = _candidate_facts_for_reference( _local_candidate_fact_pool( diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index 0ad60e0f52..c81b1cc6c3 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -23,6 +23,7 @@ ledger_target_registry_parity_report, period_values_semantically_equal, reference_fact_selectors, + restamp_reference_period, select_ledger_targets, select_ledger_targets_from_jsonl, selector_field_is_supported, @@ -5099,6 +5100,38 @@ def test__given_a_pinned_dimension_value_with_no_facts__then_calendar_year_windo compile_ledger_target_references(facts, [reference], country="uk") +def test__given_two_series_of_one_pinned_value_and_none_of_the_other__then_calendar_year_window_refuses() -> ( + None +): + # Given: two ulsterbus series that differ only in their record set, both + # complete, and no metro_glider fact: two complete series, but not one per + # pinned service (the review of microcosm#1422). + facts = [] + for record_set in ("a", "b"): + for opening_year in (2024, 2025): + fact = _cy_window_fact( + key=f"ulsterbus_{record_set}_fy{opening_year}", + value=10.0, + opening_year=opening_year, + measure_id="passenger_receipts", + ) + fact["dimensions"] = {**fact["dimensions"], "service": "ulsterbus"} + fact["layout"] = {**fact["layout"], "record_set_id": f"set_{record_set}"} + facts.append(fact) + reference = _cy_window_reference( + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "passenger_receipts", + "geography_level": "country", + "geography_id": "0100000US", + "dimension_values": {"service": ["ulsterbus", "metro_glider"]}, + }, + ) + + with pytest.raises(ValueError, match="one series per declared selector member"): + compile_ledger_target_references(facts, [reference], country="uk") + + def test__given_a_two_series_selector_short_of_a_year__then_calendar_year_window_refuses() -> ( None ): @@ -5755,13 +5788,15 @@ def test__given_a_complement_numerator__then_its_cells_come_off_the_universe() - spec = registry.specs[0] window = 0.25 * 304.0 + 0.75 * 329.0 assert spec.value == pytest.approx(window * 60.0 / 80.0) + # The recorded pieces give the value back: the numerator is the complement. assert spec.metadata["ledger_value_numerator"] == repr(60.0) assert spec.metadata["ledger_value_numerator_rule"] == ( - "denominator less the numerator cells" + "the denominator less the listed numerator cells" ) assert spec.metadata["ledger_value_formula"] == ( - "(3/12 * FY2024 + 9/12 * FY2025) * (denominator - numerator) / denominator" + "(3/12 * FY2024 + 9/12 * FY2025) * numerator / denominator" ) + assert float(spec.metadata["ledger_value_ratio"]) == pytest.approx(0.75) # The flag is metadata, never a selector field. assert "complement" not in reference_fact_selectors(reference)[1] @@ -6006,3 +6041,26 @@ def test__given_a_window_ratio_list_unlike_its_count__then_it_refuses() -> None: ], country="uk", ) + + +@pytest.mark.parametrize( + ("observation", "period", "moved"), + [("2026-01", 2024, "2025-01"), ("2026-01", "2027", "2028-01"), (2026, 2023, 2024)], +) +def test__given_an_observation_period__then_a_restamp_keeps_its_offset( + observation, period, moved +) -> None: + """A row that reads DfE's January census after its model year reads the + census after the new model year once restamped (the review of + microcosm#1422).""" + reference = _cy_window_reference( + value_operation="identity", period=2025, observation_period=observation + ) + restamped = restamp_reference_period(reference, period) + assert restamped.period == period + assert restamped.observation_period == moved + # Without an observation period only the target period moves. + plain = restamp_reference_period( + _cy_window_reference(value_operation="identity"), 2024 + ) + assert plain.period == 2024 and plain.observation_period is None diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 22bea00c87..4129de95cd 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -12,7 +12,6 @@ import os import subprocess import sys -from dataclasses import replace from importlib import resources as importlib_resources from pathlib import Path @@ -29,6 +28,7 @@ from microcosm.build.ledger_targets import ( LedgerTargetReference, compile_ledger_target_references, + restamp_reference_period, ) from microcosm.build.target_reference_authoring import ( TargetReferenceAuthoringConfig, @@ -718,14 +718,13 @@ def test_dfe_extended_sum_refuses_the_suppressed_2024_member() -> None: ) facts = [json.loads(line) for line in feed.open() if '"source_name": "dfe"' in line] - # Read at the January 2024 census, which has no working parent "2 years" - # cell: the row itself selects January 2026 (microcosm#1095 D5). + # Model year 2023 reads the January 2024 census, which has no working + # parent "2 years" cell: restamping the row moves its observation period + # with it (microcosm#1095 D5; the review of microcosm#1422). + restamped = restamp_reference_period(reference, 2023) + assert restamped.observation_period == "2024-01" with pytest.raises(ValueError, match="expected 2 members.*resolved 1"): - compile_ledger_target_references( - facts, - [replace(reference, period=2024, observation_period=None)], - country="uk", - ) + compile_ledger_target_references(facts, [restamped], country="uk") def test_uk_target_references_bind_the_spi_net_property_amounts_unscaled() -> None: diff --git a/tools/fit_uk_childcare_takeup.py b/tools/fit_uk_childcare_takeup.py index b2053a77d1..8cb1b9fcef 100644 --- a/tools/fit_uk_childcare_takeup.py +++ b/tools/fit_uk_childcare_takeup.py @@ -16,8 +16,8 @@ from microcosm.build.country_spec import load_country_spec from microcosm.build.ledger_artifact import load_ledger_consumer_artifact from microcosm.build.ledger_targets import ( - LedgerTargetReference, compile_ledger_target_references, + restamp_reference_period, ) from microcosm.build.stochastic_assignment import ( clipped_normal_from_uniforms, @@ -187,7 +187,7 @@ def compile_childcare_targets( for target_id in declared: reference = references[target_id] period = vintage_overrides.get(target_id, target_period) - restamped = LedgerTargetReference(**{**reference.__dict__, "period": period}) + restamped = restamp_reference_period(reference, period) compiled = compile_ledger_target_references( _candidate_facts_for_reference(facts, restamped), [restamped], country="uk" ) From c0dd6eae2a601172bef9b8e9bfd2b8163880d868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:02:24 +0000 Subject: [PATCH 36/39] Scale the council tax nation rows to main residences and restate replaced designs - The three OBR council tax nation rows take obr.council_tax's main-residence share, so they sum to the bound row and each reads its nation's fit on the same basis; their notes, exclusion reasons and changelog say so (finding 7). - Texts that described replaced designs: the R4 changelog's matched-period hold, the parity tool's DfE census and council tax rationales, the DfE rows' contract note, the local census's MSOA income entry (D18a's circularity reason) and the generator's SLC comment (13). Co-Authored-By: Claude Opus 5.5 --- ...ncil-tax-nation-rows-pin-and-hold.fixed.md | 2 +- ...c-devolved-repayments-by-nation.changed.md | 2 +- .../uk/calibration_measure_exclusions.json | 6 +- .../build/uk/uk_population_targets.json | 104 ++++++++++++++++-- .../build/uk_runtime/local_target_census.py | 14 ++- ...edger_compile_parity_signed_differences.py | 10 +- tools/generate_uk_target_references.py | 5 +- 7 files changed, 120 insertions(+), 23 deletions(-) diff --git a/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md b/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md index 9d63dcbdf7..2280cfcbdf 100644 --- a/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md +++ b/changelog.d/1095-uk-council-tax-nation-rows-pin-and-hold.fixed.md @@ -1 +1 @@ -`obr.council_tax_england`, `obr.council_tax_scotland` and `obr.council_tax_wales` compile their facts: OBR's table 4.1 is UK-wide, so Chronicle stamps the three nation rows K02000001, and they now pin to the UK, as `obr.council_tax` and `obr.domestic_rates` do, instead of the nation codes the substring rule gave them, where no fact sits (microcosm#1095 D14e). Each binding still scopes the model column to its nation. `obr.council_tax` binds their sum, so measure exclusions hold the three rows as diagnostics, measured on every evaluation as evidence for the CT-C comparison (María's ruling of 2026-10-29). +`obr.council_tax_england`, `obr.council_tax_scotland` and `obr.council_tax_wales` compile their facts: OBR's table 4.1 is UK-wide, so Chronicle stamps the three nation rows K02000001, and they now pin to the UK, as `obr.council_tax` and `obr.domestic_rates` do, instead of the nation codes the substring rule gave them, where no fact sits (microcosm#1095 D14e). Each binding still scopes the model column to its nation. `obr.council_tax` binds their sum scaled to main residences (D14f), and each nation row is scaled by the same share, so the three sum to it; measure exclusions hold the three rows as diagnostics, measured on every evaluation as evidence for the CT-C comparison (María's ruling of 2026-10-29). diff --git a/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md index be3bca32fa..c9a5123872 100644 --- a/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md +++ b/changelog.d/1095-uk-slc-devolved-repayments-by-nation.changed.md @@ -1 +1 @@ -SLC's devolved student loan repayments are one row per nation, `slc.repayments.wales_total`, `slc.repayments.scotland_total` and `slc.repayments.northern_ireland_total`, each declaring its nation's geography in its selector, in place of one devolved row that compiled no fact at the Great Britain pin (microcosm#1095 R4). Each measures the frame's own year against SLC's 2024-25 outturn, under a signed matched-period hold. Wales binds; Scotland and Northern Ireland are held as diagnostics until their borrowers' own plan thresholds are modelled (María's ruling of 2026-10-29). +SLC's devolved student loan repayments are one row per nation, `slc.repayments.wales_total`, `slc.repayments.scotland_total` and `slc.repayments.northern_ireland_total`, each declaring its nation's geography in its selector, in place of one devolved row that compiled no fact at the Great Britain pin (microcosm#1095 R4). Each carries SLC's 2024-25 outturn to 2025 by policyengine-uk's OBR average earnings index, since repayments are a share of earnings above the plan thresholds (María's ruling of 2026-10-30). Wales binds; Scotland and Northern Ireland are held as diagnostics until their borrowers' own plan thresholds are modelled (María's ruling of 2026-10-29). diff --git a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json index 5a66182484..0ce41adb2e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json @@ -398,7 +398,7 @@ }, { "name": "obr.council_tax_england", - "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives England's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to England, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives England's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households, scaled to main residences (D14f); the nation row is scaled by the same share, so the three sum to the bound row. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to England, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", "tracking": "microcosm#1095", "approved_by": "juaristi22", "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", @@ -407,7 +407,7 @@ }, { "name": "obr.council_tax_scotland", - "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Scotland's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Scotland, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Scotland's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households, scaled to main residences (D14f); the nation row is scaled by the same share, so the three sum to the bound row. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Scotland, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", "tracking": "microcosm#1095", "approved_by": "juaristi22", "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", @@ -416,7 +416,7 @@ }, { "name": "obr.council_tax_wales", - "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Wales's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Wales, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", + "reason": "Diagnostic by design, not a weight question: OBR's March 2026 expenditure table 4.1 gives Wales's council tax receipts as one of the three nation rows whose sum, row 15, obr.council_tax binds over Great Britain's households, scaled to main residences (D14f); the nation row is scaled by the same share, so the three sum to the bound row. Binding the nation row as well would only repeat that total's information by nation. Since this PR the row compiles, pinned to the UK as OBR's table is UK-wide (Chronicle stamps it K02000001, and the substring rule had pinned it to Wales, where no fact sits), and it is measured on every evaluation as evidence for the CT-C comparison of council tax liability with the stored bills.", "tracking": "microcosm#1095", "approved_by": "juaristi22", "adjudication": "María's ruling of 2026-10-29 on the plan for the next #1095 PR (microcosm#1095, item D14e): pin the three OBR council tax nation rows to the UK and hold them as measured diagnostics.", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json index 777fd84860..18cabb5358 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_population_targets.json @@ -930,7 +930,7 @@ "ons_15_19_sex_band_split": "María's ruling of 2026-10-13 (microcosm#1095, uk-data#563): the two national 15_19 sex bands are split into ages 15, 16-17 and 18-19. uk-data#563 found weights that fit the five-year band while holding too many 16-year-olds and too few 18- and 19-year-olds, and nothing in this contract bound the mix inside the band either. The six rows partition the two bands and read the same ONS mid-year estimate by single year of age, so each sex's three rows sum to the band they replace. The incumbent ons/female_15_19 and ons/male_15_19 rows move from mapped to excluded: no single contract row has their definition.", "ons_single_year_ages_0_2": "microcosm#1278 (the pre-Budget PR's plan, approved by María on 2026-10-20; microcosm#1095): three all-persons rows bind ages 0, 1 and 2, read from the same ONS mid-year estimate by single year of age as the 0_4 sex bands. Unlike the 15_19 split, whose pieces replaced the bands, the 0_4 sex bands keep their incumbent mapping and stay bound: the three rows cover ages 0 to 2 for both sexes together, so neither band is their sum. The three are contract-only declarations; no incumbent row moves.", "ons_single_year_ages_0_6": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (item 6; microcosm#1278, #1095). Eleven all-persons rows extend the single years of age: the UK rows go on from age 2 to age 6, and England binds ages 0 to 6 at E92000001. Every row reads the ONS mid-2025 estimate by single year of age (Population estimates for the UK, England, Wales, Scotland and Northern Ireland: mid-2025, published 1 October 2026; on the feed since the 942a1fa re-pin, microcosm#1123), the series the 0_4 and 5_9 sex bands and the region 0_9 cells sum, so the nested rows are consistent: the UK rows for ages 0 to 4 sum to the two 0_4 sex bands, and England's rows sit inside England's nine region 0_9 cells. Every band stays bound; the eleven are contract-only declarations and no incumbent row moves. Scotland's age 0 is already bound as ons.population.scotland_babies_under_1; Wales and Northern Ireland are left to the UK rows, as each nation's single year rests on too few FRS households.", - "dfe_funded_childcare_single_ages": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): bind every DfE funded-childcare count the model can carry, even on few records, and sign out only those with a real reason. María's ruling of 2026-10-22 (Vahid's round-2 finding A on microcosm#1338) measures every DfE row at the spring term. DfE counts the children registered in its January census by their age on the preceding 31 December, so each row counts the children funded in the term that starts on 1 January of the model year's April-to-March span, by their age on 31 December (uk_runtime/dfe_spring_term.py). policyengine-uk 2.147.2 stops the free hours when a child starts school, from its date of birth (reception the September after the fourth birthday), and starts working parent hours the term after the minimum age; the universal and 2-year-old measures count every child of the DfE age, as the term after the birthday does, where the engine still gates them on the age on 6 October. No row reads current_education. Bound, England, January 2025 census: working parent registrations at 9 to 11 months and at ages 1, 2 and 3; universal registrations in nursery at age 3; and the three earlier rows, working parent 2 to 4, early learning for 2-year-olds and universal-only (nursery ages 3 and 4 less working parent ages 3 and 4). The under-2 rows take their own take-up: a child under 2 in a family that claims working-parent hours draws whether it uses them, at its own contract rate, as DfE registers far fewer of the youngest eligible children (parental leave) than of those aged 2 to 4. The model year is 2025, so its spring term is January 2026: the January 2025 census is the same classification one birth cohort earlier, the in-year snapshot the holds record. Signed out, each for its reason: the three age-4 cells (working parent and universal in nursery: the bound 2 to 4 and universal-only rows, less the bound ages 2 and 3, already fix them on the facts and on the measures; universal in reception: the school place meets those children's entitlement, the model funds no early-years hours for them, and who is in reception follows only the date of birth, which the survey does not record); reception at age 3 (the same reason, and DfE records a handful); the 9 months to 2 years, 3 to 4 years and Total working parent cells, the nursery and reception Totals, the early learning for 2-year-olds Total and the all-entitlements Total (sums or copies of bound cells, or sums that include a signed-out cell); the universal all-provision cells at ages 3, 4 and Total (nursery plus reception, a few children off their sum in DfE's own table); the estimated eligible children, eligible nursery children and all-children estimates (DfE builds them from population and survey-based inputs, not administrative counts, and the all-children estimates restate the ONS England single years already bound at a different reference date); and the registered percentages (ratios of a bound count to one of those estimates). The FRS records no deferred school start and no council-funded independent reception place, so the model starts every child at school on the date its date of birth implies, which slightly undercounts the 4-year-olds in nursery; DfE notes that in 2025 some 2-year-olds eligible for both entitlements were recorded under working parents rather than early learning." + "dfe_funded_childcare_single_ages": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): bind every DfE funded-childcare count the model can carry, even on few records, and sign out only those with a real reason. María's ruling of 2026-10-22 (Vahid's round-2 finding A on microcosm#1338) measures every DfE row at the spring term. DfE counts the children registered in its January census by their age on the preceding 31 December, so each row counts the children funded in the term that starts on 1 January of the model year's April-to-March span, by their age on 31 December (uk_runtime/dfe_spring_term.py). policyengine-uk 2.147.2 stops the free hours when a child starts school, from its date of birth (reception the September after the fourth birthday), and starts working parent hours the term after the minimum age; the universal and 2-year-old measures count every child of the DfE age, as the term after the birthday does, where the engine still gates them on the age on 6 October. No row reads current_education. Bound, England, January 2026 census: working parent registrations at 9 to 11 months and at ages 1, 2 and 3; universal registrations in nursery at age 3; and the three earlier rows, working parent 2 to 4, early learning for 2-year-olds and universal-only (nursery ages 3 and 4 less working parent ages 3 and 4). The under-2 rows take their own take-up: a child under 2 in a family that claims working-parent hours draws whether it uses them, at its own contract rate, as DfE registers far fewer of the youngest eligible children (parental leave) than of those aged 2 to 4. The model year is 2025, so its spring term is January 2026, the census the rows read (each declares observation_period 2026-01; microcosm#1095 D5), which retired the in-year snapshot holds that had read the January 2025 census. Signed out, each for its reason: the three age-4 cells (working parent and universal in nursery: the bound 2 to 4 and universal-only rows, less the bound ages 2 and 3, already fix them on the facts and on the measures; universal in reception: the school place meets those children's entitlement, the model funds no early-years hours for them, and who is in reception follows only the date of birth, which the survey does not record); reception at age 3 (the same reason, and DfE records a handful); the 9 months to 2 years, 3 to 4 years and Total working parent cells, the nursery and reception Totals, the early learning for 2-year-olds Total and the all-entitlements Total (sums or copies of bound cells, or sums that include a signed-out cell); the universal all-provision cells at ages 3, 4 and Total (nursery plus reception, a few children off their sum in DfE's own table); the estimated eligible children, eligible nursery children and all-children estimates (DfE builds them from population and survey-based inputs, not administrative counts, and the all-children estimates restate the ONS England single years already bound at a different reference date); and the registered percentages (ratios of a bound count to one of those estimates). The FRS records no deferred school start and no council-funded independent reception place, so the model starts every child at school on the date its date of birth implies, which slightly undercounts the 4-year-olds in nursery; DfE notes that in 2025 some 2-year-olds eligible for both entitlements were recorded under working parents rather than early learning." }, "scope_target_ids": [ "obr.income_tax", @@ -2594,7 +2594,7 @@ "equals": "ENGLAND" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to England. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to England. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15) scaled to main residences (D14f), and this row is scaled by the same share (England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings; MHCLG Council Taxbase, October 2025), so the three rows sum to the bound one and report each nation's fit on its basis for the CT-C comparison without binding (the review of microcosm#1422) (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_england", @@ -2609,7 +2609,37 @@ }, "category_id": "obr.efo_expenditure", "label": "Council tax england", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "target_id": "obr.council_tax_scotland", @@ -2637,7 +2667,7 @@ "equals": "SCOTLAND" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Scotland. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Scotland. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15) scaled to main residences (D14f), and this row is scaled by the same share (England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings; MHCLG Council Taxbase, October 2025), so the three rows sum to the bound one and report each nation's fit on its basis for the CT-C comparison without binding (the review of microcosm#1422) (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_scotland", @@ -2652,7 +2682,37 @@ }, "category_id": "obr.efo_expenditure", "label": "Council tax scotland", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "target_id": "obr.council_tax_wales", @@ -2680,7 +2740,7 @@ "equals": "WALES" } ], - "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Wales. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15), so this row reports the nation's fit for the CT-C comparison without binding (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." + "notes": "OBR Table 4.1 reports net council tax receipts (net of council tax reduction), so the binding is council_tax_less_benefit, not gross council_tax (uk-data targets/compute/council_tax.py:21-43 at 12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3). Chronicle stamps the row K02000001, as OBR's table 4.1 is UK-wide, and the selector pins it there; the binding scopes the model column to Wales. Held as a measured diagnostic: obr.council_tax binds the three nations' sum (row 15) scaled to main residences (D14f), and this row is scaled by the same share (England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings; MHCLG Council Taxbase, October 2025), so the three rows sum to the bound one and report each nation's fit on its basis for the CT-C comparison without binding (the review of microcosm#1422) (calibration_measure_exclusions.json, María's ruling of 2026-10-29, microcosm#1095). Measured at the calendar-2025 window of the OBR fiscal years (three twelfths of FY2024-25, nine twelfths of FY2025-26; calendar_year_window), María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year (PolicyEngine/chronicle#280 lane)." }, "axiom": { "metric_name": "obr/council_tax_wales", @@ -2695,7 +2755,37 @@ }, "category_id": "obr.efo_expenditure", "label": "Council tax wales", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "target_id": "obr.domestic_rates", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/local_target_census.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/local_target_census.py index 605d74f662..a55c2e83b8 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/local_target_census.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/local_target_census.py @@ -540,11 +540,13 @@ def _derived_resource_pin(source_id: str) -> dict[str, str | int]: "latest_vintage": "financial year ending 2023", "status": SOURCE_STATUS_SIGNED_DEFERRED, "ledger_fact_pin": _LEDGER_FACT_FEED_PIN, - "signed_reason_id": "msoa_mean_to_la_deferred", + "signed_reason_id": "frs_model_based_circularity", "signed_rationale": ( - "The pinned Ledger fact feed carries ONS equivalised-income facts " - "at MSOA grain, not local-authority grain; the local-authority " - "mean aggregation design is deferred." + "Kept out: ONS models its small-area income estimates (MSOA " + "means, before and after housing costs, and housing costs) from " + "the FRS, so binding them would partly fit the FRS to itself; the " + "feed also carries no local-authority rows (María's ruling of " + "2026-10-29, microcosm#1095 D18a)." ), "verified_on": _SOURCES_VERIFIED_ON, "notes": ( @@ -552,8 +554,8 @@ def _derived_resource_pin(source_id: str) -> dict[str, str | int]: "see the frs_model_based_target_circularity adjudication. The " "BHC and AHC measures are independently modelled and not " "directly comparable — see the ons_bhc_ahc_noncomparable " - "adjudication. MSOA-to-local-authority aggregation is signed " - "deferred for this run; England and Wales only." + "adjudication. Kept out as circular (María's ruling of " + "2026-10-29, microcosm#1095 D18a); England and Wales only." ), }, { diff --git a/tools/build_uk_ledger_compile_parity_signed_differences.py b/tools/build_uk_ledger_compile_parity_signed_differences.py index 35560f3032..18155fd865 100644 --- a/tools/build_uk_ledger_compile_parity_signed_differences.py +++ b/tools/build_uk_ledger_compile_parity_signed_differences.py @@ -118,7 +118,10 @@ class ParityReceiptSpec: "binds OBR table 4.1 row 15, the council tax receipts of England, Scotland " "and Wales, over Great Britain's households, at the calendar-2025 window " "(three twelfths of FY2024-25 and nine twelfths of FY2025-26, María's rule " - "of 2026-09-22, PolicyEngine/chronicle#280 lane); the frozen incumbent " + "of 2026-09-22, PolicyEngine/chronicle#280 lane), scaled to main residences " + "by England's chargeable dwellings less its second homes and empty " + "dwellings, over its chargeable dwellings (MHCLG Council Taxbase, October " + "2025; María's ruling of 2026-10-29, microcosm#1095 D14f); the frozen incumbent " "fixture holds the FY2025-26 value of row 19 alone, which adds Northern " "Ireland domestic rates, the council tax accruals adjustment and the " "high-value council tax surcharge." @@ -424,11 +427,12 @@ class ParityReceiptSpec: _DFE_SINGLE_AGE_LEDGER_ONLY_RATIONALE = ( "Requested by María on 2026-10-21 for the £100k childcare costing fixes " "(microcosm#1278, #1095): one of the five DfE funded-childcare counts by " - "single age from the January 2025 census, England (working parent " + "single age from the January 2026 census, England (working parent " "registrations at 9 to 11 months and at ages 1, 2 and 3, and universal " "nursery registrations at age 3), bound beside the working parent 2 to 4, " "early learning and universal-only rows and, with them, measured at the " - "spring term by the age on 31 December (María's ruling of 2026-10-22). The " + "spring term by the age on 31 December (María's ruling of 2026-10-22), the " + "model year 2025's spring term being January 2026 (microcosm#1095 D5). The " "age-4 cells are signed out, as the bound rows fix them. The incumbent binds " "no DfE row, so this row has no fixture counterpart." ) diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py index 2c5373eaee..dd28f6663d 100644 --- a/tools/generate_uk_target_references.py +++ b/tools/generate_uk_target_references.py @@ -517,8 +517,9 @@ def _geography_composition( # construction (maintenance_loan_in_england_system, # parents_learning_allowance_eligible and adult_dependants_grant_eligible # all require country == ENGLAND). slc.repayments.* stays with the - # substring rule: its england_* ids name their nation, and devolved_total - # needs a per-nation redesign before it can activate. + # substring rule: its england_* ids name their nation, and the Welsh, + # Scottish and Northern Irish rows declare their nation's geography in + # their selectors (microcosm#1095 R4). ("slc.support.", "england"), ("dfe.", "england"), # ORR rail industry finance is Great Britain (K03000001): NI Railways sits From 43c3da74e84fdeb416569b918e128e65e4b2a328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:35:49 +0000 Subject: [PATCH 37/39] Regenerate the UK target surfaces after the review fixes (feed 53815b2) The national references, membership and compile-parity receipt move only for the three OBR council tax nation rows, now scaled by obr.council_tax's main-residence share, and for the restated DfE and council tax rationales. The local census carries D18a's circularity reason for ONS's small-area income rows. The local references, the local parity receipt, the coverage manifest and the H2 fixture regenerate unchanged. Co-Authored-By: Claude Opus 5.5 --- ...ity_incumbent_2025_signed_differences.json | 18 ++-- .../build/uk/target_reference_membership.json | 6 +- .../microcosm/build/uk/target_references.json | 96 ++++++++++++++++++- .../build/uk/uk_local_target_census.json | 6 +- 4 files changed, 108 insertions(+), 18 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json index b3a9c31fbb..d2435b3a43 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json @@ -334,7 +334,7 @@ "ledger_value": 535209.0, "name": "dfe.funded_childcare.universal_nursery_children_age_3", "period": 2025, - "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." + "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2026 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22), the model year 2025's spring term being January 2026 (microcosm#1095 D5). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", @@ -355,28 +355,28 @@ "ledger_value": 30679.0, "name": "dfe.funded_childcare.working_parent_children_9_to_11_months", "period": 2025, - "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." + "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2026 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22), the model year 2025's spring term being January 2026 (microcosm#1095 D5). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", "ledger_value": 210825.0, "name": "dfe.funded_childcare.working_parent_children_age_1", "period": 2025, - "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." + "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2026 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22), the model year 2025's spring term being January 2026 (microcosm#1095 D5). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", "ledger_value": 260238.0, "name": "dfe.funded_childcare.working_parent_children_age_2", "period": 2025, - "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." + "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2026 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22), the model year 2025's spring term being January 2026 (microcosm#1095 D5). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", "ledger_value": 278490.0, "name": "dfe.funded_childcare.working_parent_children_age_3", "period": 2025, - "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2025 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." + "reason": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): one of the five DfE funded-childcare counts by single age from the January 2026 census, England (working parent registrations at 9 to 11 months and at ages 1, 2 and 3, and universal nursery registrations at age 3), bound beside the working parent 2 to 4, early learning and universal-only rows and, with them, measured at the spring term by the age on 31 December (María's ruling of 2026-10-22), the model year 2025's spring term being January 2026 (microcosm#1095 D5). The age-4 cells are signed out, as the bound rows fix them. The incumbent binds no DfE row, so this row has no fixture counterpart." }, { "kind": "ledger_only", @@ -9029,12 +9029,12 @@ "ledger_value": 47197225993.12901, "name": "obr.council_tax", "period": 2025, - "reason": "Series and period basis (microcosm#1095, María's ruling of 2026-10-09): ours binds OBR table 4.1 row 15, the council tax receipts of England, Scotland and Wales, over Great Britain's households, at the calendar-2025 window (three twelfths of FY2024-25 and nine twelfths of FY2025-26, María's rule of 2026-09-22, PolicyEngine/chronicle#280 lane); the frozen incumbent fixture holds the FY2025-26 value of row 19 alone, which adds Northern Ireland domestic rates, the council tax accruals adjustment and the high-value council tax surcharge." + "reason": "Series and period basis (microcosm#1095, María's ruling of 2026-10-09): ours binds OBR table 4.1 row 15, the council tax receipts of England, Scotland and Wales, over Great Britain's households, at the calendar-2025 window (three twelfths of FY2024-25 and nine twelfths of FY2025-26, María's rule of 2026-09-22, PolicyEngine/chronicle#280 lane), scaled to main residences by England's chargeable dwellings less its second homes and empty dwellings, over its chargeable dwellings (MHCLG Council Taxbase, October 2025; María's ruling of 2026-10-29, microcosm#1095 D14f); the frozen incumbent fixture holds the FY2025-26 value of row 19 alone, which adds Northern Ireland domestic rates, the council tax accruals adjustment and the high-value council tax surcharge." }, { "fixture_value": 44117237614.71528, "kind": "calibration_drift", - "ledger_value": 43393548211.03646, + "ledger_value": 41990496408.172676, "name": "obr.council_tax_england", "period": 2025, "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." @@ -9042,7 +9042,7 @@ { "fixture_value": 3051227494.93594, "kind": "calibration_drift", - "ledger_value": 3023016871.201955, + "ledger_value": 2925273094.855295, "name": "obr.council_tax_scotland", "period": 2025, "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." @@ -9050,7 +9050,7 @@ { "fixture_value": 2400769752.36827, "kind": "calibration_drift", - "ledger_value": 2357688064.2762027, + "ledger_value": 2281456490.1010394, "name": "obr.council_tax_wales", "period": 2025, "reason": "Period basis (PolicyEngine/chronicle#280 lane, María's rule of 2026-09-22 that fiscal-year facts take only the months to the end of the calibration calendar year): ours binds the OBR March 2026 line at the calendar-2025 window, three twelfths of FY2024-25 and nine twelfths of FY2025-26, on the same series; the frozen incumbent fixture holds the FY2025-26 value alone." diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json index be45c733a1..037209b12f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json @@ -11527,7 +11527,7 @@ "matched_fact_count_overall": 14, "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 43393548211.03646, + "resolved_value": 41990496408.172676, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_198ca997d4ddfd2aaca01f99" } @@ -11542,7 +11542,7 @@ "matched_fact_count_overall": 14, "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 3023016871.201955, + "resolved_value": 2925273094.855295, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_699522ac3c064cf3770cda90" } @@ -11557,7 +11557,7 @@ "matched_fact_count_overall": 14, "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 2357688064.2762027, + "resolved_value": 2281456490.1010394, "resolved_fact_period": "2025", "resolved_fact_key": "ledger_aggregate_fact_v2_d5e6ed73de3f7fd5c44dd9ef" } diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_references.json b/packages/microcosm-build/src/microcosm/build/uk/target_references.json index 11bcd34225..51c156251b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -1359,7 +1359,37 @@ "measure_kind": "prepared_column" }, "assertion_policy": "allow_source_projection", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "name": "obr.council_tax_scotland", @@ -1378,7 +1408,37 @@ "measure_kind": "prepared_column" }, "assertion_policy": "allow_source_projection", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "name": "obr.council_tax_wales", @@ -1397,7 +1457,37 @@ "measure_kind": "prepared_column" }, "assertion_policy": "allow_source_projection", - "value_operation": "calendar_year_window" + "value_operation": "calendar_year_window_scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": [ + "mhclg.council_taxbase.second_homes", + "mhclg.council_taxbase.empty_dwellings" + ], + "expected_member_count": 2, + "complement": true, + "label": "England's second homes and empty dwellings, Council Taxbase October 2025, taken off the chargeable stock" + }, + { + "role": "denominator", + "source_name": "mhclg", + "source_measure_id": "total", + "layout_groupby_value_id": "e92000001", + "period_type": "month", + "period_value": "2025-10", + "source_concept": "mhclg.council_taxbase.chargeable_dwellings", + "label": "England's chargeable dwellings, Council Taxbase October 2025" + } + ] }, { "name": "obr.domestic_rates", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json b/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json index 13ca258cd6..d55226749d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json @@ -921,11 +921,11 @@ "source_commit": "53815b24844cb63c103209f197f9d3d9e2e424a9", "source_repo": "PolicyEngine/chronicle" }, - "notes": "Model-based estimates built from the Family Resources Survey \u2014 see the frs_model_based_target_circularity adjudication. The BHC and AHC measures are independently modelled and not directly comparable \u2014 see the ons_bhc_ahc_noncomparable adjudication. MSOA-to-local-authority aggregation is signed deferred for this run; England and Wales only.", + "notes": "Model-based estimates built from the Family Resources Survey \u2014 see the frs_model_based_target_circularity adjudication. The BHC and AHC measures are independently modelled and not directly comparable \u2014 see the ons_bhc_ahc_noncomparable adjudication. Kept out as circular (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a); England and Wales only.", "product": "Income estimates for small areas, England and Wales: mean household income at MSOA grain for four measures, including net equivalised disposable income before and after housing costs.", "publisher": "Office for National Statistics", - "signed_rationale": "The pinned Ledger fact feed carries ONS equivalised-income facts at MSOA grain, not local-authority grain; the local-authority mean aggregation design is deferred.", - "signed_reason_id": "msoa_mean_to_la_deferred", + "signed_rationale": "Kept out: ONS models its small-area income estimates (MSOA means, before and after housing costs, and housing costs) from the FRS, so binding them would partly fit the FRS to itself; the feed also carries no local-authority rows (Mar\u00eda's ruling of 2026-10-29, microcosm#1095 D18a).", + "signed_reason_id": "frs_model_based_circularity", "source_id": "ons_small_area_income_msoa", "status": "signed_deferred", "url": "https://www.ons.gov.uk/peoplepopulationandcommunity/personalandhouseholdfinances/incomeandwealth/bulletins/smallareamodelbasedincomeestimates/financialyearending2023", From 9d25e45791fb7bb578627699b4e6d07ef88b927e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 18:09:53 +0000 Subject: [PATCH 38/39] Check the DfE contract note for the observation period, not the old snapshot The restated note says each DfE row declares observation_period 2026-01 (D5); the test still looked for the replaced in-year snapshot's "one birth cohort earlier". Co-Authored-By: Claude Opus 5.5 --- .../tests/engine_free/uk/test_uk_population_targets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py index aef865acb6..23c4bbdf18 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py @@ -768,7 +768,7 @@ def test_uk_population_targets_bind_dfe_funded_childcare_by_single_age() -> None "measures every DfE row at the spring term", "by their age on the preceding 31 December", "No row reads current_education", - "one birth cohort earlier", + "each declares observation_period 2026-01", "the three age-4 cells", "already fix them", "reception at age 3", From 5b693b73675687445ae81dff71e7cc1d9db91887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Sat, 31 Oct 2026 18:59:19 +0000 Subject: [PATCH 39/39] Answer the re-review: the copy gate's phase, restamps, counts and floors - Blocker: uk_stage_childcare_copy_take_up_signal runs at the transferred phase. Its stage, childcare_copy_take_up, runs after the assembled boundary (frs_brma), so at the assembled phase the gate found no receipt and failed closed on every licensed spine build. The contract mirrors, the changelog and the digests follow. A test now fails on any assembled-phase stage gate that reads a stage after the boundary, and the copy gate passes end to end through the battery's stage_health binding on a frame whose flags vary. - restamp_reference_period moves an annual range's two ends and a prefixed year, leaves any spelling alone at a zero shift, and a row it cannot move is recorded unsupported, not aborting the compile. The authoring tools move a contract's observation period with the authored period (observation_period_base, 2025 for the UK), and the UC matrix diagnostic restamps through the helper. - The regional home values gate reads a rounded count at the counts that round to it. The annual income gate says when the pay concept ratio was held to its bounds. - The floor guard catches a comparison with ten in any form, a keyword or default of ten, "< 10" and "at least ten", over the UK tools, microcosm-data and the hand-written UK JSON; each ten it keeps is allowed by the phrase that contains it, never by its line. - The SPI transport rounds its positive-row count as every receipt count is; the spec says the ten rows are a statistical floor. The U3 adjudication states the floor of three, and the parity tool gives D18a's reason for the ONS small-area income rows. The complement test checks the denominator. The gate battery and spine-part digests are re-pinned, and the coverage manifest follows the spec. Co-Authored-By: Claude Opus 5.5 --- ...095-uk-take-up-stage-signal-gates.added.md | 2 +- .../src/microcosm/build/ledger_targets.py | 21 +++- .../build/target_reference_authoring.py | 29 +++++- .../uk/calibration_measure_exclusions.json | 2 +- .../src/microcosm/build/uk/gates.json | 4 +- .../uk/release_input_coverage_manifest.json | 46 ++++----- .../src/microcosm/build/uk/source_stages.json | 2 +- .../src/microcosm/build/uk/spec/sources.yaml | 2 +- .../build/uk_runtime/ledger_targets.py | 16 +++- .../build/uk_runtime/spi_rank_transport.py | 10 +- .../build/uk_runtime/stage_health.py | 17 +++- .../engine_free/shared/test_ledger_targets.py | 13 ++- .../shared/test_target_reference_authoring.py | 21 ++++ .../uk/test_uk_childcare_copy_take_up.py | 33 ++++++- .../uk/test_uk_frs_annual_income.py | 1 + .../engine_free/uk/test_uk_receipt_counts.py | 96 ++++++++++++++----- .../uk/test_uk_spi_rank_transport.py | 12 +-- .../engine_free/uk/test_uk_stage_health.py | 43 +++++++-- .../engine_free/uk/test_uk_take_up_gate.py | 5 +- .../src/microcosm/data/contract.py | 12 +-- .../tests/engine_free/shared/test_contract.py | 8 +- ...edger_compile_parity_signed_differences.py | 8 +- tools/diagnose_uk_uc_matrix.py | 3 +- tools/generate_uk_target_references.py | 3 + 24 files changed, 309 insertions(+), 100 deletions(-) diff --git a/changelog.d/1095-uk-take-up-stage-signal-gates.added.md b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md index 700336d6e1..0dbdef10c7 100644 --- a/changelog.d/1095-uk-take-up-stage-signal-gates.added.md +++ b/changelog.d/1095-uk-take-up-stage-signal-gates.added.md @@ -1 +1 @@ -The twelve take-up flags the terminal uk_take_up_signal gate measures are checked at their drawing stages too: frs_take_up, frs_person_draws and frs_household_draws each record the drawn flags' shares at the stage's weights, childcare_copy_take_up records the five childcare flags it re-draws for the copies, and four assembled-phase stage-health gates hold them to their contract targets within the terminal gate's bounds, so a draw defect fails at its stage apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). A flag whose population rests on one or two source households is flagged unchecked at its stage, never failed (María's ruling of 2026-10-26); the terminal gate still measures it. +The twelve take-up flags the terminal uk_take_up_signal gate measures are checked at their drawing stages too: frs_take_up, frs_person_draws and frs_household_draws each record the drawn flags' shares at the stage's weights, childcare_copy_take_up records the five childcare flags it re-draws for the copies, and four stage-health gates hold them to their contract targets (three at the assembled phase, and the copy stage's at the transferred phase, since it runs after the assembled boundary) within the terminal gate's bounds, so a draw defect fails at its stage apart from calibration's drift (María's ruling of 2026-10-29, microcosm#1095). A flag whose population rests on one or two source households is flagged unchecked at its stage, never failed (María's ruling of 2026-10-26); the terminal gate still measures it. diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 9a0a307659..f2c4c0450b 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -4695,12 +4695,27 @@ def _period_year(period: int | str) -> int: def _shift_period_years(period: int | str, years: int) -> int | str: + """The period ``years`` later, in its own spelling. + + A year (``2026``, ``"FY2026"``) or a month (``"2026-01"``) moves its year; + an annual range (``"2024-25"``, ``"fy2024_25"``), whose end is the + following year, moves both ends. Any other spelling refuses, unless it + does not move. + """ + + if years == 0: + return period if isinstance(period, int): return period + years - match = re.fullmatch(r"(\d{4})(.*)", str(period).strip()) - if match is None: + text = str(period).strip() + ranged = re.fullmatch(r"(\D*)(\d{4})([-_])(\d{2})", text) + if ranged and int(ranged.group(4)) == (int(ranged.group(2)) + 1) % 100: + start = int(ranged.group(2)) + years + return f"{ranged.group(1)}{start}{ranged.group(3)}{(start + 1) % 100:02d}" + dated = re.fullmatch(r"(\D*)(\d{4})((?:[-_]\d{2})?)", text) + if dated is None: raise ValueError(f"cannot move the period {period!r} by {years} year(s).") - return f"{int(match.group(1)) + years}{match.group(2)}" + return f"{dated.group(1)}{int(dated.group(2)) + years}{dated.group(3)}" def _selection_period(reference: LedgerTargetReference) -> int | str | None: diff --git a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py index d4aa5f2aba..e4c8366ea8 100644 --- a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py +++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py @@ -23,7 +23,9 @@ _not_after_target_period, _period_key, _period_key_from_value, + _period_year, _selection_period, + _shift_period_years, compile_ledger_target_references, reference_fact_selectors, ) @@ -123,6 +125,27 @@ class TargetReferenceAuthoringConfig: binding_vocabulary: frozenset[str] = frozenset() source_fact_feed: str = "" uprating_appliers: Mapping[str, UpratingApplier] = field(default_factory=dict) + #: The target period the contract's observation periods are written for: + #: a row authored at another period moves its observation period by the + #: same number of years, as ``restamp_reference_period`` does (the + #: re-review of microcosm#1422). ``None`` copies them unchanged. + observation_period_base: int | str | None = None + + +def _authored_observation_period( + target: Mapping[str, Any], + config: TargetReferenceAuthoringConfig | AreaTargetReferenceAuthoringConfig, +) -> int | str | None: + """The contract's observation period, moved to the authored target period.""" + + observation_period = target.get("observation_period") + if observation_period is None or config.observation_period_base is None: + return observation_period + return _shift_period_years( + observation_period, + _period_year(config.target_period) + - _period_year(config.observation_period_base), + ) @dataclass(frozen=True) @@ -209,6 +232,8 @@ class AreaTargetReferenceAuthoringConfig: #: uprated at authoring exactly as the runtime compile uprates it, so the #: committed reference and the run manifest carry one value (#1123). uprating_appliers: Mapping[str, Callable[..., Any]] = field(default_factory=dict) + #: As ``TargetReferenceAuthoringConfig.observation_period_base``. + observation_period_base: int | str | None = None def normalized_areas(self) -> dict[str, tuple[str, ...]]: """Return area rosters with duplicate ids removed in declared order.""" @@ -1199,7 +1224,7 @@ def _area_reference_row( period_match_policy = target.get("period_match_policy") if period_match_policy is not None: row["period_match_policy"] = period_match_policy - observation_period = target.get("observation_period") + observation_period = _authored_observation_period(target, config) if observation_period is not None: row["observation_period"] = observation_period uprating_index = target.get("uprating_index") @@ -1426,7 +1451,7 @@ def _reference_row( period_match_policy = target.get("period_match_policy") if period_match_policy is not None: row["period_match_policy"] = period_match_policy - observation_period = target.get("observation_period") + observation_period = _authored_observation_period(target, config) if observation_period is not None: row["observation_period"] = observation_period uprating_index = target.get("uprating_index") diff --git a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json index 0ce41adb2e..ae2aaca850 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json @@ -76,7 +76,7 @@ "reason": "Zero-support floor: a row in one of the floor's scopes (the UC payment-distribution and benefit-cap amount bands, the HMRC SPI income bands by total income and SPI Table 3.10's self-employment income bands, and the band-H council-tax rows by English region) whose compiled matrix row reaches no source household (household_source_id) with a positive prior weight cannot be fitted by any weights (the solver's initialiser refuses a nonzero target with no support), so it is dropped from the solve, not pooled. A row that some households carry stays bound however few they are; when fewer than 10 distinct source households carry it, its model figures are withheld from every written surface (the UK Data Service working floor, CD171 section 5.2.1). Each scope holds one unit, because its share ceiling sums published values. The floor's receipt reports each target's dropped published total and each scope's dropped share, and the run refuses when a scope's drops pass either of its ceilings or when a per-row exclusion names a row the floor drops.", "tracking": "microcosm#1095", "approved_by": "juaristi22", - "adjudication": "microcosm#1095 U3, ruled 2026-10-16 with the fifth ports PR (floor 10) and revised 2026-10-21 with #1333: a cell that rests on fewer than 10 records is no reason to leave a row out, only a measured distortion of the calibration is. The floor drops only rows no household carries, the benefit-cap amount bands join its scope and their per-row entries retire, and the figures of rows under 10 source households are withheld, as the BRMA rows' are. The thirteen entries it retired (the eleven benefit-cap amount bands and the two HMRC £500k to £1m cells) and the A/B that retired them: experiments/1095-uk-thin-row-binding-receipts.md. Extended on 2026-10-22 (María's ruling on the next policyengine-uk bump) to the HMRC SPI income-band families and the band-H council-tax rows by region, in scopes of one unit each with their own ceilings. On #1333's policyengine-uk 2.145.0 spine every HMRC £1m-and-over cell and every band-H region cell has carriers. The three band-H region entries retire and their rows bind, with their figures withheld where fewer than 10 source households carry them; the ten HMRC £1m-and-over cells, bound on arm 1, distorted their neighbours and stay held on that measurement, so the HMRC scopes cover the bands below them. Extended on 2026-10-29 in microcosm#1420, in answer to the independent review's finding 7 and pending María's confirmation, to the SPI families microcosm#1418 binds, Table 3.7's other income by total-income band and Table 3.10's self-employment bands from GBP 1 to GBP 10,000: a row of theirs that no household carries is dropped and receipted as its siblings' rows are, not refused. The ceilings are unchanged, so the HMRC amounts scope's 2-row cap, signed for seven families, now covers nine, and the counts scope's, signed for seven, now covers eight; María confirms or re-sizes them (the re-reviews of microcosm#1420, H and 4).", + "adjudication": "microcosm#1095 U3, ruled 2026-10-16 with the fifth ports PR (floor 10) and revised 2026-10-21 with #1333: a cell that rests on fewer than 10 records is no reason to leave a row out, only a measured distortion of the calibration is. The floor drops only rows no household carries, the benefit-cap amount bands join its scope and their per-row entries retire, and the figures of rows under 10 source households are withheld, as the BRMA rows' are (under three since María's ruling of 2026-10-29). The thirteen entries it retired (the eleven benefit-cap amount bands and the two HMRC £500k to £1m cells) and the A/B that retired them: experiments/1095-uk-thin-row-binding-receipts.md. Extended on 2026-10-22 (María's ruling on the next policyengine-uk bump) to the HMRC SPI income-band families and the band-H council-tax rows by region, in scopes of one unit each with their own ceilings. On #1333's policyengine-uk 2.145.0 spine every HMRC £1m-and-over cell and every band-H region cell has carriers. The three band-H region entries retire and their rows bind, with their figures withheld where fewer than 10 source households carry them (fewer than three since María's ruling of 2026-10-29, receipt_counts.UK_DISCLOSURE_FLOOR); the ten HMRC £1m-and-over cells, bound on arm 1, distorted their neighbours and stay held on that measurement, so the HMRC scopes cover the bands below them. Extended on 2026-10-29 in microcosm#1420, in answer to the independent review's finding 7 and pending María's confirmation, to the SPI families microcosm#1418 binds, Table 3.7's other income by total-income band and Table 3.10's self-employment bands from GBP 1 to GBP 10,000: a row of theirs that no household carries is dropped and receipted as its siblings' rows are, not refused. The ceilings are unchanged, so the HMRC amounts scope's 2-row cap, signed for seven families, now covers nine, and the counts scope's, signed for seven, now covers eight; María confirms or re-sizes them (the re-reviews of microcosm#1420, H and 4).", "approved_on": "2026-10-22", "expires_on": "2027-01-08" }, diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index e624af9760..5b18661165 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -999,7 +999,7 @@ { "id": "uk_stage_childcare_copy_take_up_signal", "gate": "stage_health", - "phase": "assembled", + "phase": "transferred", "criticality": "release_blocking", "evidence_absent_blocks": true, "population_fact_check": true, @@ -1016,7 +1016,7 @@ "person.max_free_entitlement_hours_used" ] }, - "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): childcare_copy_take_up re-draws five of the flags frs_take_up drew (Tax-Free Childcare, the extended, universal and targeted hours, and the under-2 usage of the extended hours) for the support and CGT copies on their own benefit units, so they are measured again after the re-draw, over the whole frame at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." + "notes": "Stage-time take-up signal gate (María's ruling of 2026-10-29, microcosm#1095): childcare_copy_take_up re-draws five of the flags frs_take_up drew (Tax-Free Childcare, the extended, universal and targeted hours, and the under-2 usage of the extended hours) for the support and CGT copies on their own benefit units, so they are measured again after the re-draw (at the transferred phase, as the copy stage runs after the assembled boundary), over the whole frame at the stage's household weights before calibration, against their contract targets within the terminal gate's bounds (0.05; 0.10 for the under-2 usage), and no benefit unit may claim the extended hours without the universal ones. Calibration's drift cannot move them here, so a failure is a draw defect. The bounds are the terminal gate's until a spine build's receipt measures the stage-time deviations. The receipt withholds a share or target whose population rests on fewer than three source households (UKDS disclosure control), which the gate flags unchecked rather than failing (María's ruling of 2026-10-26), as the terminal gate still measures it at the calibrated weights; a synthetic smoke build records a failure without blocking on it (population_fact_check)." }, { "id": "uk_stage_isa_subscriptions_invariants", diff --git a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json index eff71f8dfd..6b50f166d7 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json @@ -472,7 +472,7 @@ "required_mass_change_reason": "Capital-gains incidence anchor moves the mass of non-liable clone households back to their paired originals until the sub-exempt and loss-making clone mass match the Advani-Summers reporter composition at the redrawn liable mass; every pair's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, the HMRC Table 3 redrawn gains on the spine and Advani-Summers capital-gains incidence" @@ -495,7 +495,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, and Advani-Summers capital-gains incidence" @@ -518,7 +518,7 @@ "required_mass_change_reason": "Capital-gains residential split divides every household carrying liable gainers into arms weighted by the solved residential probabilities, one arm per subset of residential gainers; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) on the amounts the Table 3 redraw placed" @@ -540,7 +540,7 @@ "required_mass_change_reason": "Capital-gains support split divides the wealthiest households of each HMRC Table 3 income band into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 3 for 2024-25, via the vendored conditioning facts", "survey": "Family Resources Survey 2024-25, SPI synthetic support and HMRC Capital Gains Tax statistics Table 3 (2024-25 individuals by size of gain and taxable income)" @@ -569,7 +569,7 @@ "required_mass_change_reason": "ETB public-services imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab, DfT rail fare index, and public NHS activity/cost table.", "survey": "Effects of Taxes and Benefits 1977-2024 and NHS age-gender public table" @@ -589,7 +589,7 @@ "required_mass_change_reason": "ETB VAT expenditure-rate imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource.", "survey": "Effects of Taxes and Benefits 1977-2024" @@ -611,7 +611,7 @@ "required_mass_change_reason": "High-value home support divides every owner household in the top value stratum of its region into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Microcosm structural operator (microcosm#1240 fix 1); no publisher input", "survey": "Family Resources Survey 2024-25 and SPI synthetic support, after the WAS wealth draw and the regional property uprating" @@ -632,7 +632,7 @@ "required_mass_change_reason": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative), Table 4.1 (individuals claiming Business Asset Disposal Relief or Investors' Relief by band of qualifying gain, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" @@ -656,7 +656,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", "conditioning_resource_sha256": "f7425784231e1f6aa657d0f26fc02591d9523600eb12fce5d35becf5dabf7569", @@ -746,7 +746,7 @@ "full_frs_tei_band_unavailable" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "hmrc_surface": "2023-24", "mapped_build_period": "2024", @@ -773,7 +773,7 @@ "required_mass_change_reason": "ISA subscriptions per adult from HMRC's ISA tables on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "HMRC Individual Savings Account statistics Tables 9.4, 9.6 and 9.7 to 9.9, the cash ISA limit reduction impact note and Lifetime ISA Table 1a, via the vendored facts; Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "HMRC Annual savings statistics (September 2026 release); Wealth and Assets Survey round 8" @@ -838,7 +838,7 @@ "required_mass_change_reason": "LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", "survey": "Living Costs and Food Survey 2024-25" @@ -864,7 +864,7 @@ "required_mass_change_reason": "NTS bus-travel imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Department for Transport National Travel Survey, UK Data Service SN 5340 (End User Licence, 19th edition, November 2025), DOI 10.5255/UKDA-SN-5340-19; local licensed tab files (household, individual, trip); England residents only from 2013.", "survey": "National Travel Survey 2002-2024" @@ -884,7 +884,7 @@ "required_mass_change_reason": "Private-school attendance stored on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "policyengine-uk attends_private_school (the gov.simulation.private_school_vat attendance rates and factor), evaluated by the pinned engine", "survey": "policyengine-uk private-school attendance imputation, stored at the spine's weights" @@ -907,7 +907,7 @@ "property_finance_costs" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "https://www.gov.uk/government/statistics/property-rental-income-statistics", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)" @@ -928,7 +928,7 @@ "required_mass_change_reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics", "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b" @@ -951,7 +951,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations", "survey": "HM Land Registry Price Paid latest sales uprated with the UK House Price Index, owner-weighted by region (the dense value node's knots, region level)" @@ -975,7 +975,7 @@ "non_residential_property_value" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "MHCLG dwellings and the UK House Price Index regional average price averaged over the twelve months of calendar 2024 from the July 2026 full file, the frame's valuation basis, so the engine's annual uprating from 2024 projects the value once (microcosm#1240 fix 5).", "survey": "Public regional property reference" @@ -1003,7 +1003,7 @@ "employment_income" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "HMRC, Salary sacrifice reform for pension contributions effective from 6 April 2029", "survey": "Family Resources Survey 2024-25 salary-sacrifice respondents and HMRC salary-sacrifice reform analysis" @@ -1036,7 +1036,7 @@ "household_source_id" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Reserved SPI support households for the HMRC Table 2.5 total-income bands from GBP 200,000, stacked at the published band taxpayer count over the donors per band (PolicyEngine/chronicle#280 lane).", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Income Tax liabilities statistics July 2026 Table 2.5" @@ -1058,7 +1058,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Explore Education Statistics Table 6a, Higher education total", "survey": "Family Resources Survey 2024-25 and Student Loans Company borrower forecasts for England" @@ -1080,7 +1080,7 @@ "required_mass_change_reason": "WAS Lifetime ISA imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "Wealth and Assets Survey round 8" @@ -1119,7 +1119,7 @@ "required_mass_change_reason": "WAS wealth imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "41cadd7a1326771a78bb879b19c6ed49f4f89ab50a142718acbebec699e502d7", + "source_manifest_sha256": "d3bf428ec406e1baa8f384bb6fba434a8d13d36219be1ba72df8a9563508c027", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed 2006-22 household tab.", "survey": "Wealth and Assets Survey round 8" diff --git a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json index 59d1a657a4..811f4e0a6f 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -1979,7 +1979,7 @@ "folds": 5, "fold_key": "predictor cell (gender, region, whole-year age, main_source, has_pay, has_trade, at_or_over_spa), the fold being floor(uniform x folds) of the cell's stable_identity_uniforms draw at the stage seed and salt spi_stage1:reference_fold; each fold's recipients are located by a forest fitted on the other folds, so the forest that locates a copy never saw its twin, and every row of a cell is located by one forest", "method": "Rosenblatt transport (microcosm#840): each drawn recipient's twin values are located on the reference forest, the sign uniform in the gate's cumulative class probabilities and the quantile on the sign's magnitude forest, each leaf chained on the twin's observed earlier leaves, and the stage-1 forest draws at those uniforms, so the recipient receives the SPI income of someone in the same position among SPI people like it as the twin holds among FRS people like it. taxable_savings_interest is savings_interest_income, the interest outside ISAs, floored at zero. A leaf without an analogue, or whose analogue is degenerate on the FRS rows, draws at identity-keyed uniforms, as do the placements inside a class or a flat stretch of a conditional; no model random stream is consumed. The reference locates a leaf given the twin's observed earlier analogue leaves, while the stage-1 forest draws it given every earlier output, the identity-uniform leaves included, so the located quantile is read off a conditional the identity draws also shape (microcosm#840 follow-up: the chain order). A full build refuses a reference the predictor cells cannot cross-fit (only a sampled rung or a synthetic fixture may locate in-sample, and its receipt says so), a recipient whose fold differs from its twin's, and a reference whose sign classes differ from the stage-1 forest's on any located target.", - "receipt": "per target the analogue, the FRS regime and sign classes, the uniform source and the Kolmogorov-Smirnov distance of the sign uniforms and of the quantiles over positive rows from U[0,1), overall and by main_source over at least 10 rows; a positive-row count under 10 is withheld; the counts in the stage evidence stay with the build and are not published" + "receipt": "per target the analogue, the FRS regime and sign classes, the uniform source and the Kolmogorov-Smirnov distance of the sign uniforms and of the quantiles over positive rows from U[0,1), overall and by main_source over at least 10 rows (a statistical floor, as a distance over fewer says nothing); positive-row counts are rounded as every receipt count is, one or two rows reading <3; the counts in the stage evidence stay with the build and are not published" }, "identity_uniforms": { "key": "person_source_id", diff --git a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml index 714ce06396..fd0b6d7e78 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -1714,7 +1714,7 @@ stages: folds: 5 fold_key: 'predictor cell (gender, region, whole-year age, main_source, has_pay, has_trade, at_or_over_spa), the fold being floor(uniform x folds) of the cell''s stable_identity_uniforms draw at the stage seed and salt spi_stage1:reference_fold; each fold''s recipients are located by a forest fitted on the other folds, so the forest that locates a copy never saw its twin, and every row of a cell is located by one forest' method: 'Rosenblatt transport (microcosm#840): each drawn recipient''s twin values are located on the reference forest, the sign uniform in the gate''s cumulative class probabilities and the quantile on the sign''s magnitude forest, each leaf chained on the twin''s observed earlier leaves, and the stage-1 forest draws at those uniforms, so the recipient receives the SPI income of someone in the same position among SPI people like it as the twin holds among FRS people like it. taxable_savings_interest is savings_interest_income, the interest outside ISAs, floored at zero. A leaf without an analogue, or whose analogue is degenerate on the FRS rows, draws at identity-keyed uniforms, as do the placements inside a class or a flat stretch of a conditional; no model random stream is consumed. The reference locates a leaf given the twin''s observed earlier analogue leaves, while the stage-1 forest draws it given every earlier output, the identity-uniform leaves included, so the located quantile is read off a conditional the identity draws also shape (microcosm#840 follow-up: the chain order). A full build refuses a reference the predictor cells cannot cross-fit (only a sampled rung or a synthetic fixture may locate in-sample, and its receipt says so), a recipient whose fold differs from its twin''s, and a reference whose sign classes differ from the stage-1 forest''s on any located target.' - receipt: per target the analogue, the FRS regime and sign classes, the uniform source and the Kolmogorov-Smirnov distance of the sign uniforms and of the quantiles over positive rows from U[0,1), overall and by main_source over at least 10 rows; a positive-row count under 10 is withheld; the counts in the stage evidence stay with the build and are not published + receipt: per target the analogue, the FRS regime and sign classes, the uniform source and the Kolmogorov-Smirnov distance of the sign uniforms and of the quantiles over positive rows from U[0,1), overall and by main_source over at least 10 rows (a statistical floor, as a distance over fewer says nothing); positive-row counts are rounded as every receipt count is, one or two rows reading <3; the counts in the stage evidence stay with the build and are not published identity_uniforms: key: person_source_id salt: 'spi_stage1::' diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py index ba756262ce..b11c22240e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py @@ -491,7 +491,13 @@ def compile_uk_target_registry( compiled = [] unsupported: list[dict[str, str]] = [] for reference in spec.target_references: - restamped = restamp_reference_period(reference, target_period) + try: + restamped = restamp_reference_period(reference, target_period) + except ValueError as error: + unsupported.append( + {"name": reference.name, "period": target_period, "reason": str(error)} + ) + continue candidate_facts = _candidate_facts_for_reference( fact_rows, restamped, fact_indices_by_source=fact_indices_by_source ) @@ -1427,7 +1433,13 @@ def compile_uk_local_target_registry( compiled = [] unsupported: list[dict[str, str]] = [] for reference in spec.local_target_references: - restamped = restamp_reference_period(reference, target_period) + try: + restamped = restamp_reference_period(reference, target_period) + except ValueError as error: + unsupported.append( + {"name": reference.name, "period": target_period, "reason": str(error)} + ) + continue _assert_local_reference_in_crosswalk(restamped, rosters) candidate_facts = _candidate_facts_for_reference( _local_candidate_fact_pool( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py index 2ad5b666c6..10ba7f27a5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/spi_rank_transport.py @@ -57,6 +57,7 @@ FRS_HMRC_SRP_REGULAR_CODE5_COLUMN, FRS_HMRC_UBISJA_COLUMN, ) +from microcosm.build.uk_runtime.receipt_counts import rounded_count from microcosm.build.uk_runtime.spi_support import ( SPI_HMRC_EMPLOYMENT_BENEFITS_COLUMN, SPI_HMRC_EMPLOYMENT_EXPENSES_COLUMN, @@ -619,11 +620,10 @@ def _uniformity( return { "rows": int(len(sign)), "sign": _kolmogorov(sign), - # A count under the group floor is not reported (CD171 5.2.1), as the - # by-group receipt withholds a small group. - "positive_rows": ( - positive_rows if positive_rows >= SPI_TRANSPORT_GROUP_MINIMUM_ROWS else None - ), + # The count is rounded as every receipt count is (receipt_counts): one + # or two rows read "<3" (CD171 5.2.1). The distances need ten rows, a + # statistical floor, as the by-group receipt's do. + "positive_rows": rounded_count(positive_rows), "quantile": _kolmogorov(quantile[rows]) if rows.any() else None, } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index 42c2a48371..25a56a6e51 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -1319,6 +1319,10 @@ def _frs_annual_income_spells_gate( and support is not None and _count_bounds(support)[1] < PAY_CONCEPT_RATIO_MINIMUM_SUPPORT ) + if held: + # The stage held the ratio to its bounds: the value printed is the + # bound it was held to, not a measurement. + details["pay_concept_ratio_held_to_bounds"] = True if value == UK_WITHHELD or held: details[f"{key}_measured"] = False elif isinstance(value, bool) or not isinstance(value, int | float): @@ -4639,14 +4643,23 @@ def _regional_home_values_gate( def _count_bounds(count: object) -> tuple[float, float]: - """The lowest and highest counts a receipt's count stands for: a band's - bounds, or the count itself.""" + """The lowest and highest counts a receipt's count stands for. + + A band stands for its bounds. ``receipt_counts.rounded_count`` prints a + count of ten or more to the nearest ten below a thousand and to the + nearest hundred from a thousand, halves up, so a printed count stands for + the counts that round to it; a smaller count is exact. + """ if isinstance(count, str): if count not in _SUPPORT_BAND_BOUNDS: raise ValueError(f"unknown count band {count!r}.") return _SUPPORT_BAND_BOUNDS[count] value = int(count) + if value >= 1000: + return value - 50, value + 49 + if value >= 10: + return value - 5, value + 4 return value, value diff --git a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py index c81b1cc6c3..6235614ce8 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_ledger_targets.py @@ -5790,6 +5790,7 @@ def test__given_a_complement_numerator__then_its_cells_come_off_the_universe() - assert spec.value == pytest.approx(window * 60.0 / 80.0) # The recorded pieces give the value back: the numerator is the complement. assert spec.metadata["ledger_value_numerator"] == repr(60.0) + assert spec.metadata["ledger_value_denominator"] == repr(80.0) assert spec.metadata["ledger_value_numerator_rule"] == ( "the denominator less the listed numerator cells" ) @@ -6045,7 +6046,17 @@ def test__given_a_window_ratio_list_unlike_its_count__then_it_refuses() -> None: @pytest.mark.parametrize( ("observation", "period", "moved"), - [("2026-01", 2024, "2025-01"), ("2026-01", "2027", "2028-01"), (2026, 2023, 2024)], + [ + ("2026-01", 2024, "2025-01"), + ("2026-01", "2027", "2028-01"), + (2026, 2023, 2024), + # An annual range moves both ends; a prefixed year moves its year. + ("2025-26", 2024, "2024-25"), + ("fy2025_26", 2027, "fy2027_28"), + ("FY2026", 2026, "FY2027"), + # A restamp to the same period leaves any spelling as it is. + ("FY2026", 2025, "FY2026"), + ], ) def test__given_an_observation_period__then_a_restamp_keeps_its_offset( observation, period, moved diff --git a/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py b/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py index 8d36f26158..a051f49091 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_target_reference_authoring.py @@ -1288,3 +1288,24 @@ def test_a_geography_pin_cannot_override_the_selector_s_declared_geography() -> _target_selector( target, {"geography_level": "country", "geography_id": "K03000001"}, config ) + + +@pytest.mark.parametrize(("period", "observed"), [(2025, "2026-01"), (2026, "2027-01")]) +def test_authored_observation_period_moves_with_the_authored_period( + period, observed +) -> None: + """A contract's observation period is written for a base period, and a row + authored at another period keeps the offset, as restamp_reference_period + does (the re-review of microcosm#1422).""" + from microcosm.build.target_reference_authoring import ( + _authored_observation_period, + ) + + target = {"observation_period": "2026-01"} + config = TargetReferenceAuthoringConfig( + target_period=period, observation_period_base=2025 + ) + assert _authored_observation_period(target, config) == observed + # Without a declared base the period is copied as written. + plain = TargetReferenceAuthoringConfig(target_period=period) + assert _authored_observation_period(target, plain) == "2026-01" diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py index 2ee8614ff4..1761d4b6cc 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_childcare_copy_take_up.py @@ -60,7 +60,7 @@ def _stage(): ] -def _frame(contract, *, natives: int = _NATIVES): +def _frame(contract, *, natives: int = _NATIVES, with_infants: bool = False): """Native households plus one copy of each per copy stage. Every copy carries its host's childcare draws, as the copy stages leave @@ -99,8 +99,12 @@ def _frame(contract, *, natives: int = _NATIVES): household["region"] = "LONDON" ids = household["household_id"].to_numpy(dtype=np.int64) sources = household["source_household_id"].to_numpy(dtype=np.int64) - # Every other host's child is under 2, and its copies inherit its age. + # Every other host's child is under 2, and its copies inherit its age; with + # infants, every fourth host's child is under 1, whose usage rate is below + # one, so the under-2 usage varies as it does in a build. ages = np.where(sources % 2 == 0, 1, 3) + if with_infants: + ages = np.where(sources % 4 == 0, 0, ages) person = pd.DataFrame( { "person_id": ids, @@ -381,3 +385,28 @@ def test_stage_records_the_redrawn_flags_for_its_signal_gate() -> None: parameters=dict(gate.parameters), ) assert not any("omits" in f or "undeclared" in f for f in result.failures) + + +def test_the_copy_stage_gate_passes_end_to_end_through_the_spine_battery() -> None: + """The copy stage's receipt, read through the battery's stage_health + binding with the committed gate parameters, passes on a frame whose flags + vary (the re-review of microcosm#1422).""" + from microcosm.build import load_country_spec + from microcosm.build.gate_battery import EvidenceContext + from microcosm.build.uk_runtime.battery_bindings import UK_GATE_REGISTRY + + contract = load_uk_take_up_contract() + stage = UKChildcareCopyTakeUpStageTransform(contract=contract, stage=_stage()) + stage(_frame(contract, with_infants=True)) + gate = next( + entry + for entry in load_country_spec("uk").gates.gates + if entry.id == "uk_stage_childcare_copy_take_up_signal" + ) + assert gate.phase == "transferred" + evidence = {"childcare_copy_take_up": stage.checkpoint_metadata()["evidence"]} + result = UK_GATE_REGISTRY["stage_health"].evaluator( + EvidenceContext(artifacts={"stage_evidence": evidence}), dict(gate.parameters) + ) + assert result.passed, result.failures + assert result.details["flags_withheld_unchecked"] == [] diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py index f2c8639381..3fd1064ea5 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_frs_annual_income.py @@ -572,6 +572,7 @@ def test_gate_reads_a_ratio_held_to_its_bounds_unmeasured(support, measured) -> ) assert gate.passed, gate.failures assert gate.details.get("pay_concept_ratio_measured", True) is measured + assert gate.details.get("pay_concept_ratio_held_to_bounds", False) is not measured def _stage(**overrides) -> SourceStageSpec: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py index 3a81171215..83af9f21dd 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_receipt_counts.py @@ -105,57 +105,90 @@ def test_no_uk_output_still_withholds_at_ten() -> None: assert writers == [] -#: Floors of ten that are not the disclosure floor, each with the text that -#: names it on its line: statistical floors (too few rows to measure what the -#: figure measures), and lines that describe the old floor as history. +#: Every ten that is not a floor of ten on survey records, each by the phrase +#: that contains it: statistical floors (too few rows to measure what the +#: figure measures), band and rounding edges, history, facts true at the floor +#: of three, and tens that count something else. A phrase allows only the +#: match it contains, never another on the same line. _KEPT_TENS = { "uk_runtime/frs_annual_income.py": ( "PAY_CONCEPT_RATIO_MINIMUM_SUPPORT = 10", "support band is under ten", ), - "uk_runtime/stage_health.py": ("pay concept ratio on fewer than ten",), + "uk_runtime/stage_health.py": ( + "pay concept ratio on fewer than ten households", + "if value >= 10:", + ), + "uk_runtime/receipt_counts.py": ("if value < 10:",), "uk_runtime/spi_rank_transport.py": ("SPI_TRANSPORT_GROUP_MINIMUM_ROWS = 10",), "uk_runtime/private_rent_localisation.py": ("MIN_SAMPLED_REGION_RENTERS = 10",), "uk_runtime/frs_education.py": ("AGE_LEFT_FULL_TIME_EDUCATION_MIN = 10",), "uk_runtime/frs_spine.py": ("fewer than ten code-6 amounts",), - "uk_runtime/orrery_contract.py": ( - "no longer marks the rows resting on fewer than ten", - ), + "uk_runtime/orrery_contract.py": ("rows resting on fewer than ten",), "uk_runtime/support_floor.py": ("rests on fewer than ten records is no reason",), - "uk/spec/sources.yaml": ("over at least 10 rows",), - "tools/measure_uk_spi_half_coherence.py": ("MIN_CELL = 10",), + "uk_runtime/national_reconciliation.py": ("len(moved) > 10",), + "uk_runtime/size_evaluation.py": ("(values > 10)",), + "uk_runtime/employer_pension_contributions.py": ("8% to < 10%",), + "uk_runtime/spi_dependency.py": ("at least ten",), + "uk/spec/sources.yaml": ("over at least 10 rows (a statistical floor",), + "uk/calibration_measure_exclusions.json": ( + "a cell that rests on fewer than 10 records is no reason", + "rows under 10 source households are withheld, as the BRMA rows' are " + "(under three", + "fewer than 10 source households carry them (fewer than three", + "fewer than ten source households carry Plan 5 repayments", + ), + "uk/target_reference_signed_exclusions.json": ( + "about one household weight", + "expected to rest on fewer than 10 records", + ), + "uk/local_small_cell_rule.json": ("expected to rest on fewer than 10 records",), "tools/uk_private_rent_receipt.py": ( "MIN_GROUP_CELLS = 10", + "at least ten cells", "fewer than ten published rows", ), + "tools/measure_uk_spi_half_coherence.py": ("MIN_CELL = 10",), + "tools/measure_uk_weighted_integrity_baselines.py": ("at least ten",), } +#: The hand-written UK JSON files; the generated ones repeat what these say. +_UK_HAND_WRITTEN_JSON = ( + "gates.json", + "calibration_measure_exclusions.json", + "target_reference_signed_exclusions.json", + "local_small_cell_rule.json", + "uk_population_targets.json", +) def test_no_uk_floor_of_ten_hides_outside_the_label() -> None: """The "<10" label is only one way to keep a floor of ten: a comparison - with ten, a constant or a default of ten, or prose saying "fewer than ten" - is another (the review of microcosm#1422). Each that is left is a - statistical floor or history, named in ``_KEPT_TENS``.""" + with ten in any form, a constant, default or keyword of ten, or prose + saying "fewer than ten" or "at least ten" is another (the reviews of + microcosm#1422). Each that is left is named in ``_KEPT_TENS``.""" root = paths_for("microcosm-build").repository build = paths_for("microcosm-build").package / "src" / "microcosm" / "build" floors = re.compile( - r"\b\w*(?:support|sources?|count|households|donors|carriers|rows|cells)" - r"\w*\)?\s*<\s*10\b(?!\.\d)" - r"|^\s*_?[A-Z0-9_]*(?:MIN|FLOOR|SDC|SMALL)[A-Z0-9_]*\s*(?::[^=\n]+)?=\s*10\b" + r"<\s?10(?![\d%.])" + r"|[<>]=?\s*10\b(?!\.\d)(?!\s*\*)" + r"|\b10\s*[<>]=?(?!=)" + r"|\bminimum\w*\s*=\s*10\b" r"|\bminimum_\w*\s*:\s*int\s*=\s*10\b" - r"|\b(?:fewer than|under|below|less than) (?:ten|10 (?:rows|records|households" - r"|source households|sources|donors))\b|\bone to nine\b" - r"|\bat least 10 (?:rows|records|households|sources|donors)\b" - r'|"minimum_\w*":\s*10\b', + r"|^\s*_?[A-Z0-9_]*(?:MIN|FLOOR|SDC|SMALL)[A-Z0-9_]*\s*(?::[^=\n]+)?=\s*10\b" + r'|"(?:minimum_\w*|\w*_minimum\w*)":\s*10\b' + r"|\b(?:fewer than|under|below|less than|at least) (?:ten|10 (?:rows|records" + r"|households|source households|sources|donors|cells))\b" + r"|\bone to nine\b", re.IGNORECASE | re.MULTILINE, ) + uk_tool = re.compile(r"(?:^|_)uk(?:_|$)") paths = ( *(build / "uk_runtime").rglob("*.py"), *(build / "uk").glob("*.py"), *(build / "uk" / "spec").glob("*.yaml"), - build / "uk" / "gates.json", - *(root / "tools").rglob("*.py"), + *(build / "uk" / name for name in _UK_HAND_WRITTEN_JSON), + *(path for path in (root / "tools").rglob("*.py") if uk_tool.search(path.stem)), *(paths_for("microcosm-data").package / "src").rglob("*.py"), ) found = [] @@ -171,11 +204,22 @@ def test_no_uk_floor_of_ten_hides_outside_the_label() -> None: (), ) for match in floors.finditer(text): - line = text[ - text.rfind("\n", 0, match.start()) + 1 : text.find("\n", match.end()) - ] - if not any(needle in line for needle in kept): - found.append(f"{name}: {line.strip()[:120]}") + covered = False + for needle in kept: + at = text.find(needle, max(0, match.end() - len(needle))) + while 0 <= at <= match.start(): + if at + len(needle) >= match.end(): + covered = True + break + at = text.find(needle, at + 1) + if covered: + break + if not covered: + line_start = text.rfind("\n", 0, match.start()) + 1 + found.append( + f"{name}:{text.count(chr(10), 0, match.start()) + 1}: " + f"{text[line_start : match.end() + 40].strip()[:120]}" + ) assert found == [] diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_rank_transport.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_rank_transport.py index ed8a3e7901..dc03d0c9d6 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_rank_transport.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_spi_rank_transport.py @@ -7,6 +7,7 @@ import pytest from microcosm.build.uk_runtime import spi_rank_transport as transport +from microcosm.build.uk_runtime.receipt_counts import rounded_count from microcosm.build.uk_runtime.spi_rank_transport import ( SPI_STAGE1_ANALOGUE_COLUMNS, analogue_source_columns, @@ -168,7 +169,8 @@ def test_transport_locates_twins_and_keys_the_rest_on_identity(reference) -> Non # under ten rows. kolmogorov = result.receipt["targets"]["hmrc_spi_pay"]["kolmogorov"] assert 0.0 <= kolmogorov["sign"] <= 1.0 and 0.0 <= kolmogorov["quantile"] <= 1.0 - assert kolmogorov["positive_rows"] == int((pay > 0).sum()) + # The count is rounded as every receipt count is (receipt_counts). + assert kolmogorov["positive_rows"] == rounded_count(int((pay > 0).sum())) by_group = result.receipt["targets"]["hmrc_spi_pay"]["by_group"] assert by_group["trade"] is None assert by_group["pay"]["rows"] == int((groups == "pay").sum()) @@ -450,13 +452,11 @@ def fit_reference(encoded_train, observed_train): cross_fit_transport(fit_reference, **one_cell_call) single = cross_fit_transport(fit_reference, allow_in_sample=True, **one_cell_call) assert single.receipt["folds"] == 1 and single.receipt["cross_fitted"] is False - # A positive-row count under the group floor is withheld. + # A positive-row count is rounded as every receipt count is: one or two + # rows read "<3", three to nine "3-9". assert single.receipt["targets"]["dividend_income"]["kolmogorov"][ "positive_rows" - ] in ( - None, - *range(10, 11), - ) + ] in (0, "<3", "3-9", 10) class _ClassReference: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py index d541d8197c..a5b7bb893a 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py @@ -2799,7 +2799,7 @@ def _home_values_receipt() -> dict: [ (lambda r: r["rows_rewritten_by_region"].pop("W92000004"), "rewrites regions"), (lambda r: r["rows_rewritten_by_region"].update(E12000007=0), "no row"), - (lambda r: r.update(rows=90), "more rows"), + (lambda r: r.update(rows=40), "more rows"), (lambda r: r.update(sources_at_cap=1), "value cap"), # A band past the limit fails as plainly as the count it stands for. (lambda r: r.update(sources_at_cap="<3"), "value cap"), @@ -2832,19 +2832,28 @@ def test_regional_home_values_gate_flags_a_region_of_fewer_than_three_rows() -> def test_regional_home_values_gate_reads_a_banded_count_at_its_bounds() -> None: """A region the receipt prints "3-9" rewrote three to nine rows: not empty, - above the floor, so not flagged, and read at three in the sum check, as the - stage's own banded row count is read at its upper bound.""" + above the floor, so not flagged, and read at three in the sum check. A + rounded count is read at the lowest count that rounds to it, and the + stage's own row count at the highest.""" gate_id = "uk_stage_regional_home_values_ranking" receipt = _home_values_receipt() receipt["rows_rewritten_by_region"]["W92000004"] = "3-9" result = _gate(gate_id, receipt) assert result.passed, result.failures assert result.details["regions_rewritten_under_floor"] == [] - # Nine regions of ten and one of at least three: 93 rows at the least. - receipt["rows"] = 92 + # Nine regions printed 10 (five rows at the least) and one of at least + # three: 48 rows at the least, against a stage of 44 rows at the most. + receipt["rows"] = 40 assert "more rows" in _gate(gate_id, receipt).failures[0] - receipt["rows"] = 93 + receipt["rows"] = 50 assert _gate(gate_id, receipt).passed + # Ten regions of 15 rows print 20 each; a stage of 150 rows is not short. + rounded = _home_values_receipt() + rounded["rows_rewritten_by_region"] = { + region: 20 for region in rounded["rows_rewritten_by_region"] + } + rounded["rows"] = 150 + assert _gate(gate_id, rounded).passed # A stage whose own count is banded is read at the band's top. small = _home_values_receipt() small["rows_rewritten_by_region"] = { @@ -3373,3 +3382,25 @@ def test_apprentice_gate_is_a_population_fact_check() -> None: assert entry["population_fact_check"] is True assert entry["criticality"] == "release_blocking" assert entry["evidence_absent_blocks"] is True + + +def test_assembled_stage_gates_read_only_stages_run_by_the_assembled_boundary() -> None: + """An assembled-phase stage gate reads only a stage that has run by the + assembled boundary; a later stage's gate belongs to the transferred phase, + or the boundary offers no receipt for it and the gate fails closed (the + re-review of microcosm#1422).""" + from microcosm.build import load_country_spec + from microcosm.build.uk_runtime.spine_build import UK_SPINE_ASSEMBLED_FINAL_STAGE + + spec = load_country_spec("uk") + order = [stage.stage for stage in spec.sources.stages] + boundary = order.index(UK_SPINE_ASSEMBLED_FINAL_STAGE) + stage_gates = [entry for entry in spec.gates.gates if entry.gate == "stage_health"] + assert {str(entry.parameters["stage"]) for entry in stage_gates} <= set(order) + late = sorted( + entry.id + for entry in stage_gates + if entry.phase == "assembled" + and order.index(str(entry.parameters["stage"])) > boundary + ) + assert late == [] diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py index 684e412762..c9c52b8043 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_take_up_gate.py @@ -274,7 +274,10 @@ def _stage_gate_parameters(stage: str) -> dict[str, object]: entries = {entry.id: entry for entry in load_country_spec("uk").gates.gates} entry = entries[_SIGNAL_STAGE_GATES[stage]] assert entry.gate == "stage_health" - assert entry.phase == "assembled" + # The copy stage runs after the assembled boundary (frs_brma). + assert entry.phase == ( + "transferred" if stage == "childcare_copy_take_up" else "assembled" + ) assert entry.criticality == "release_blocking" assert entry.evidence_absent_blocks is True return dict(entry.parameters) diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 9406820064..b15c611376 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -451,13 +451,13 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "8621ac53daca32c6222cc2601ab8d33260ceaddbcc092235f39b5203c0c32657" + "1d7886509433be8de7e0b3be837822590d7920baddf4458fd365b4ca53e799ca" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "b0e9b4402bdc5faaeca9e5ad673b1a14fa47b16ad4bf05f054e5ff5141845470" + "4cf11e30ceb4ccc7ffe26b14b11b3e119016b0520ca151878da7ce2a97c00ec3" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "ef310a3ad280d052ef446bd9f8126c66fd31e27c3dc5951bdb191435546c0be2" + "17ae80fcec2ec5f86aabc3c0815ec0e390e6278ca82f0bb845173238089dbf94" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -564,7 +564,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_frs_take_up_signal": ("stage_health", "assembled"), "uk_stage_frs_person_draws_take_up_signal": ("stage_health", "assembled"), "uk_stage_frs_household_draws_take_up_signal": ("stage_health", "assembled"), - "uk_stage_childcare_copy_take_up_signal": ("stage_health", "assembled"), + "uk_stage_childcare_copy_take_up_signal": ("stage_health", "transferred"), "uk_stage_age_tail_targets": ("stage_health", "assembled"), "uk_stage_frs_relationships_composition": ("stage_health", "assembled"), "uk_ledger_compile_parity_local_incumbent_2025": ( @@ -976,10 +976,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "b38e9d15691e80abd532ddce32076a8bb40f943e01213f6f99271ca49a2ee33a" + "6c662ce80961f26b8aed76d9373177822353a8634162f7daf85277e355a1460a" ), "policy_sha256": ( - "270d09ffaeb0c4d45ed35aeef709d39da932815f11793dbdaacba8492fc86601" + "1ed89b85419ef5b97e871e8211b8cd36e0b049ecbec2c666f3b8a0734e121601" ), }, "calibration_seam": { diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index 62f2a37973..95a922722e 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -220,13 +220,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "8621ac53daca32c6222cc2601ab8d33260ceaddbcc092235f39b5203c0c32657" + "1d7886509433be8de7e0b3be837822590d7920baddf4458fd365b4ca53e799ca" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "b0e9b4402bdc5faaeca9e5ad673b1a14fa47b16ad4bf05f054e5ff5141845470" + "4cf11e30ceb4ccc7ffe26b14b11b3e119016b0520ca151878da7ce2a97c00ec3" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "ef310a3ad280d052ef446bd9f8126c66fd31e27c3dc5951bdb191435546c0be2" + "17ae80fcec2ec5f86aabc3c0815ec0e390e6278ca82f0bb845173238089dbf94" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "f246388de42654dd68dbbb40c42282001b5b0a8bf48976162bcb1199085cb1d3" @@ -386,7 +386,7 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: ), "uk_stage_childcare_copy_take_up_signal": ( "stage_health", - "assembled", + "transferred", None, ), "uk_stage_hmrc_cgt_asset_type_spine_summary": ( diff --git a/tools/build_uk_ledger_compile_parity_signed_differences.py b/tools/build_uk_ledger_compile_parity_signed_differences.py index 18155fd865..83deef0ba7 100644 --- a/tools/build_uk_ledger_compile_parity_signed_differences.py +++ b/tools/build_uk_ledger_compile_parity_signed_differences.py @@ -615,10 +615,10 @@ class ParityReceiptSpec: ) _EQUIV_INCOME_FIXTURE_ONLY_RATIONALE = ( - "Signed deferral: ONS publishes small-area income at MSOA grain only — the " - "feed carries no local-authority rows, and MSOA-to-LA aggregation of a " - "mean-valued, model-output series is ruled downstream build work behind the " - "frs_model_based_target_circularity and ons_bhc_ahc_noncomparable fences." + "Kept out: ONS models its small-area income estimates (MSOA means, before " + "and after housing costs, and housing costs) from the FRS, so binding them " + "would partly fit the FRS to itself; the feed also carries no " + "local-authority rows (María's ruling of 2026-10-29, microcosm#1095 D18a)." ) _PRIVATE_RENT_FIXTURE_ONLY_RATIONALE = ( diff --git a/tools/diagnose_uk_uc_matrix.py b/tools/diagnose_uk_uc_matrix.py index 80c5482658..3ff1e502e7 100644 --- a/tools/diagnose_uk_uc_matrix.py +++ b/tools/diagnose_uk_uc_matrix.py @@ -30,6 +30,7 @@ from microcosm.build.ledger_targets import ( LedgerTargetReference, compile_ledger_target_references, + restamp_reference_period, ) from microcosm.build.target_materialization import ( materialize_target_bindings, @@ -386,7 +387,7 @@ def compile_explicit_references(facts, path, year): fact_rows = tuple(facts) specs = [] for row in payload["target_references"]: - reference = LedgerTargetReference(**{**row, "period": year}) + reference = restamp_reference_period(LedgerTargetReference(**row), year) candidates = _candidate_facts_for_reference(fact_rows, reference) registry = compile_ledger_target_references( candidates, [reference], country="uk" diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py index dd28f6663d..3833f07eb5 100644 --- a/tools/generate_uk_target_references.py +++ b/tools/generate_uk_target_references.py @@ -144,6 +144,9 @@ def fanout_name(target: Mapping[str, Any], fact: Mapping[str, Any]) -> str | Non config = TargetReferenceAuthoringConfig( target_period=args.period, + # The DfE rows' observation periods (January 2026) are written for + # model year 2025 (microcosm#1095 D5). + observation_period_base=2025, geography_pins=_geography_pins(contract), geography_fanout_by_target_id=_geography_fanout(contract), geography_fanout_metadata=_geography_fanout_metadata,