diff --git a/changelog.d/1095-additional-property-purchases.added.md b/changelog.d/1095-additional-property-purchases.added.md
new file mode 100644
index 000000000..2c6da23d7
--- /dev/null
+++ b/changelog.d/1095-additional-property-purchases.added.md
@@ -0,0 +1,9 @@
+A new spine stage, `property_purchases`, imputes each household's annual purchases of additional dwellings and of non-residential property (`additional_residential_property_purchased`, `non_residential_property_purchased`), porting uk-data#573 (a draft, at `07f6b460f`; uk-data#556; microcosm#1095). From policyengine-uk 2.134.1 (pe-uk#2241) both are inputs that default to nil, so without them a purchasing household pays SDLT on its main home only. The stage runs at the spine's design weights after the regional uprating and the high-value support copies:
+- a household whose stock of a kind is at least £40,000, the chargeable consideration HMRC's Stamp Tax tables cover, can buy once a year, at a hazard proportional to its stock;
+- the threshold on each household's exponential event score is set so that the weighted count of purchasers in England and Northern Ireland, where SDLT applies, comes closest to HMRC's transactions, and the same threshold applies in Scotland and Wales;
+- each price is a band mean drawn at HMRC's band shares, times one scale fitted so the weighted England-and-Northern-Ireland value equals HMRC's, never below £40,000 and never above the household's stock.
+- where the purchasers' stock cannot carry HMRC's value, as for non-residential property on the national spine, every purchaser buys at its stock and the receipt records the shortfall; the stage refuses below 80% of the value, while uk-data#573 refuses any shortfall (María's ruling of 2026-10-16).
+
+The targets come from HMRC's Annual Stamp Tax Statistics 2024 to 2025 (corrected), vendored from the pinned Chronicle feed as `hmrc_stamp_tax_facts.json`: Table 6b's 2024-25 higher-rates transactions and value, which cover every buyer, allocated to households by individuals' shares of Table 8a's residential transactions and value, with Table 6b's bands and the five above £2m combined; and Table 8b's 2024-25 individuals for non-residential purchases. The stage fits transactions and value only; households' SDLT is fitted at build level through `obr.sdlt`. Households' HRAD is not published, so the allocation by individuals' shares of Table 8a is an assumption, as uk-data#573 says: its household lower bounds are 87,200 transactions and £33.28bn, and the allocation probably overstates households' purchases, since nearly all receipts at or below the £250,000 nil-rate band are surcharge and other buyers' receipts there imply more higher-rates transactions than their share of all transactions. The draws read identity-keyed uniforms, so they differ from uk-data's positional streams while following the same method.
+
+The stage's receipt gives a weighted figure, the purchases outside the fit regions included, only where ten or more source households carry it, and "<10" otherwise. The share of purchasers at the stock cap appears only where the fit and both its sides rest on ten or more, and the eligible owner weight and the event rate only where both the buyers and the eligible owners who do not buy do; an empty cell reads 0. Support is counted on each row's source household, and the stage refuses a frame without one, as it refuses a frame at any period other than 2024.
diff --git a/changelog.d/1095-households-sdlt.changed.md b/changelog.d/1095-households-sdlt.changed.md
new file mode 100644
index 000000000..a6e405928
--- /dev/null
+++ b/changelog.d/1095-households-sdlt.changed.md
@@ -0,0 +1,3 @@
+`obr.sdlt` now binds households' SDLT, not the whole OBR line (uk-data#564, microcosm#1095). The OBR's Stamp Duty Land Tax line covers every buyer, and HMRC's other buyers (companies, partnerships and collective investment schemes) pay about a third of the receipts; 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. The target is the OBR line's calendar-2025 window (three twelfths of 2024-25, nine of 2025-26) times individuals' share of HMRC's 2024-25 SDLT receipts, residential (Table 8a) and non-residential (Table 8b) together, both from the pinned Chronicle feed. uk-data#569 (a draft) subtracts policyengine-uk's corporate SDLT statistic instead, which needs the unreleased pe-uk#2322.
+
+A new target value operation, `calendar_year_window_scaled_by_ratio`, carries the rule: the `calendar_year_window` of the reference's own series, translated by the quotient of two operands that each pin their own period, may come from another publisher, and may each sum a declared number of cells (`expected_member_count`). The quotient must be a share in (0, 1], as for `scaled_by_ratio`.
diff --git a/changelog.d/1095-move-to-uc-claims.added.md b/changelog.d/1095-move-to-uc-claims.added.md
new file mode 100644
index 000000000..4c9fee4b0
--- /dev/null
+++ b/changelog.d/1095-move-to-uc-claims.added.md
@@ -0,0 +1,5 @@
+The UK spine now draws `would_claim_uc_at_legacy_closure` at DWP's Move to Universal Credit claim rates (uk-data#492, ported from uk-data#534; microcosm#1095). policyengine-uk 2.128.0 (pe-uk#2119) moves a family off a legacy benefit DWP has closed and takes its other legacy awards away; the family then claims Universal Credit if `would_claim_uc` or this flag is true, and the engine's default for the flag, true, put every such family on Universal Credit.
+
+A new stage, `uc_legacy_closure_take_up`, runs after `uc_capital_coherence` and before `pension_credit_take_up`. A benefit unit with a member reporting Universal Credit, a unit whose `would_claim_uc` is true, and a unit reporting none of the six legacy means-tested benefits keep the engine's default. Every other unit is drawn at (r - p) / (1 - p), clipped to [0, 1]: r is DWP's claimed / (claimed + did not claim) for the unit's combination of legacy benefits (the all-households rate where DWP reports none), and p is the combination's share of Great Britain's such units whose `would_claim_uc` is true, at the spine's design weights (uk-data#534's share is unweighted; María's rulings of 2026-10-16 and 2026-10-17); the probability applies in Northern Ireland too. So, in expectation, the weighted share of Great Britain's drawn units claiming at the closure in each combination is DWP's rate wherever p is at most r; where p exceeds it the receipt flags the combination (`rate_unreachable`), never p itself. Two limits carry over from uk-data#534: the drawn cohort includes units on the Pension Credit route, whose legacy benefits policyengine-uk does not close, and DWP's rates count every household sent a notice, entitled to Universal Credit or not. The rates are DWP's Stat-Xplore households sent a migration notice in Great Britain, notices July 2022 to June 2026, vendored from the pinned Chronicle feed (`uk/dwp_move_to_uc_facts.json`); households still in progress are left out. Each unit's uniform reads an identity-keyed stream.
+
+The flag joins the export surface's reviewed extra columns, and the policyengine-uk concept mapping binds it as a take-up input, so no take-up input is left at the engine's default.
diff --git a/changelog.d/1095-policyengine-uk-2-134.changed.md b/changelog.d/1095-policyengine-uk-2-134.changed.md
new file mode 100644
index 000000000..1ede7d4e6
--- /dev/null
+++ b/changelog.d/1095-policyengine-uk-2-134.changed.md
@@ -0,0 +1,6 @@
+The lock's UK side moves from policyengine-uk 2.132.6 to 2.134.4, and the UK extras of microcosm-build, microcosm-data and microcosm-frame require >=2.134.4 (microcosm#1095). policyengine-core stays at 3.33.3 on the UK side and 3.32.5 on the US side; 2.134.4 still asks for core >=3.32.27. Nothing the UK build writes is renamed, removed or re-typed. Two inputs join the engine:
+- 2.134.1 turns `additional_residential_property_purchased` and `non_residential_property_purchased` from formulas into inputs that default to nil (pe-uk#2241), so a purchasing household pays SDLT on its main home only unless the data supplies them. The sixth #1095 ports PR imputes both in the same PR.
+
+What the other releases change: 2.134.0 makes a retention-rate elasticity of 1 the default realisation response to a CGT reform (pe-uk#2419), which moves no baseline; 2.134.3 starts Scotland's top rate at the statutory £125,140 of taxable income for 2024-25 to 2026-27 (pe-uk#2437), not £112,570; and 2.134.4 draws the new-claimant UC health element for 2026 to 2032 and keeps the protected LCWRA amount from 2030-31. The CGT taxable-income lockstep test's measurement reform now switches the realisation response off, since it would move the gains the test inverts. Re-derived with no change to data: the uprating pins (the version stamp only), the concept coverage (300 inputs to 302, the two above, uncovered), the texts that cite the locked engine, the rate-class docstring and the salary-sacrifice fragment's Scottish top-rate sentence, the H2 fixture's dependency, the coverage manifest's source digests and `APPROVED_UV_LOCK_SHA256`.
+
+The lock stops at 2.134.4 (María's ruling of 2026-10-16). 2.134.5 (pe-uk#2240) limits pension relief to relevant earnings and charges the annual allowance on the excess pension input, with the new `unused_pension_annual_allowance` at its default of nil. On the national spine that moves Universal Credit awards and income tax for households with pension contributions, and the solve fails the calibrated-seam weight-ratio gate. It waits for a follow-up that supplies the unused allowance and checks the relief inputs.
diff --git a/changelog.d/1095-salary-sacrifice-rate-bands.added.md b/changelog.d/1095-salary-sacrifice-rate-bands.added.md
index 4f50ca1e0..2aa8e5484 100644
--- a/changelog.d/1095-salary-sacrifice-rate-bands.added.md
+++ b/changelog.d/1095-salary-sacrifice-rate-bands.added.md
@@ -8,4 +8,4 @@ The measure resolver gains a declared rate-class allocation. One counterfactual
A contribution that straddles a boundary is relieved at each rate, and the personal allowance taper lands in the brackets the extra pay reaches. The three bands sum to the change in the engine's `earned_income_tax` for every person, and the measure refuses if they stop doing so. The tolerance is £1 plus four float32 steps at the person's own amounts, since the engine computes in float32. The resolver's receipt records the gap to the change in `income_tax` (for example, dividends pushed into the higher dividend band). A binding that declares anything other than the exact allocation is refused. uk-data's worked examples at 2025 reproduce exactly: £454 basic and £692 higher, Scotland's £349.02 and £981.96, and £6,000 all higher where the taper applies.
-policyengine-uk puts the Scottish top-rate threshold at £112,570 rather than the statutory £125,140 (pe-uk#2130), so it files some advanced-rate relief as additional. The Table 6.2 all-rates total (£8.8bn) becomes a diagnostic on the higher-rate band, since the bands carry the same relief. The three measure exclusions that held the bands out, due to expire on 25 November, are retired.
+Up to policyengine-uk 2.134.2 the Scottish top-rate threshold was £112,570 rather than the statutory £125,140 (pe-uk#2130), so some advanced-rate relief was filed as additional; 2.134.3 (pe-uk#2437) corrects it, and microcosm locks 2.134.4 since the sixth #1095 ports PR. The Table 6.2 all-rates total (£8.8bn) becomes a diagnostic on the higher-rate band, since the bands carry the same relief. The three measure exclusions that held the bands out, due to expire on 25 November, are retired.
diff --git a/changelog.d/1112-national-home-values.added.md b/changelog.d/1112-national-home-values.added.md
new file mode 100644
index 000000000..27e29fcee
--- /dev/null
+++ b/changelog.d/1112-national-home-values.added.md
@@ -0,0 +1,5 @@
+The national release now carries Land Registry home values (microcosm#1112). A new spine stage, `regional_home_values`, runs after the high-value home support copies and gives every England-and-Wales owner household with a value the one its region's uprated Land Registry distribution holds at the household's weighted mid-rank among the owner households of its FRS region, at the spine's weights. It ranks as the dense line's value node does (ties broken by a keyed draw; the support copies spread over the top stratum by their own draws), reads the region level of the same knots resource (`uk/high_value_home_value_knots.json`; Wales is `W92000004`), and moves `property_wealth` by the value's change. Scotland, Northern Ireland, renters and owners without a value keep theirs, and the council-tax band is untouched.
+
+Before it, the national line solved the bound spine with the WAS-imputed values after the regional uprating, not the regions' Land Registry values. The dense line is unchanged: the stage keeps the value it replaced in `main_residence_value_rank_basis`, the dense value node receives that column through its slice and ranks on it (refusing if it is missing), and the release boundary drops it on both lines.
+
+The value reaches three national rows: `obr.sdlt`, through the main-home purchase value, and `ons.land.land_value` and `ons.land.household_land_value`, through `property_wealth` and policyengine-uk's land intensity; corporate land value does not move. The region knots run up to each region's largest sale and down to its smallest, as the dense line's constituency knots do, so the national line places more homes in the top surcharge bands than the derived stock facts; the tails are to be fixed on both lines together (#1112, María's ruling of 2026-10-17).
diff --git a/changelog.d/1301-high-value-homes-region-control.added.md b/changelog.d/1301-high-value-homes-region-control.added.md
index 9a472ffd0..bcd5ab6d4 100644
--- a/changelog.d/1301-high-value-homes-region-control.added.md
+++ b/changelog.d/1301-high-value-homes-region-control.added.md
@@ -1,6 +1,6 @@
The UK local line binds region controls for the high-value homes family (microcosm#1301, the issue's 6a). Three new two-level targets, `microcosm.high_value_homes.over_1m_by_region`, `over_1_5m_by_region` and `over_2m_by_region`, bind the derived Land Registry stock at the nine English regions and Wales, except the North East and Wales rows over £2m, which are signed out below the 400-home floor. They carry the same measurement block and record-set selector as the constituency and local-authority cells, so each row is the cross-grain control for its area cells, and the three `no_higher_control` local routes in `uk/cross_grain_declarations.json` are gone.
-**Local line only.** A new contract key, `calibration_lines`, names the lines a target binds on; these three declare `["local"]`. The national spine's `main_residence_value` is the WAS donor's, not a Land Registry placement. The national compiles now merge the derived facts beside the Chronicle feed too, as the local ones already did: both loaders in `full_targets.py`, the release-cut certifier, the compile-parity tool's national receipt, the national reference generator (`--derived-facts` names another resource), the UC matrix diagnosis and the incumbent-surface evaluation. `load_uk_national_target_inputs`, the certifier's calibration reference and the UC matrix diagnosis then drop the local-only rows right after the compile, before reconciliation, the measure exclusions and the frozen-register check. The national registry version is therefore unchanged. `register_completeness.calibration_line` receipts what each line dropped.
+**Local line only.** A new contract key, `calibration_lines`, names the lines a target binds on; these three declare `["local"]`. Since microcosm#1095 the national spine reads `main_residence_value` off the regions' Land Registry knots too, but binding these rows there would move the national registry and solve while the knots' tails still place more homes in the top bands than the derived stock, so that is left to microcosm#1112's follow-up. The national compiles now merge the derived facts beside the Chronicle feed too, as the local ones already did: both loaders in `full_targets.py`, the release-cut certifier, the compile-parity tool's national receipt, the national reference generator (`--derived-facts` names another resource), the UC matrix diagnosis and the incumbent-surface evaluation. `load_uk_national_target_inputs`, the certifier's calibration reference and the UC matrix diagnosis then drop the local-only rows right after the compile, before reconciliation, the measure exclusions and the frozen-register check. The national registry version is therefore unchanged. `register_completeness.calibration_line` receipts what each line dropped.
**Fan-out.** `tools/generate_uk_target_references.py` now honours a two-level target's `area_scope` by level. The region rows fan out over the English regions and Wales, which is pinned at country level `W92000004`. Scotland and Northern Ireland are not cells.
diff --git a/docs/concept-coverage/policyengine-uk.md b/docs/concept-coverage/policyengine-uk.md
index f7f197615..fb1020abe 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.132.6`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand.
+Engine version `2.134.4`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand.
-- Engine inputs: 300
-- Fed by a concept: 41
+- Engine inputs: 302
+- Fed by a concept: 42
- Structural: 11
-- Uncovered: 248
+- Uncovered: 249
- Mapped but missing from the engine: 0
## Inputs each concept feeds
@@ -30,7 +30,7 @@ Engine version `2.132.6`; concept schema `5a55669d0447`. Generated by `tools/ref
| `fact:person.educational_attainment` | `highest_education` (person) |
| `fact:person.education_enrollment` | `childcare_grant_full_time_student` (person)
`in_HE` (person) |
| `fact:person.enrolled_full_time` | `childcare_grant_full_time_student` (person) |
-| `fact:person.take_up_seed` | `child_benefit_opts_out` (benunit)
`would_claim_adult_dependants_grant` (person)
`would_claim_bursary_fund_16_to_19` (person)
`would_claim_care_to_learn` (benunit)
`would_claim_carers_allowance` (person)
`would_claim_child_benefit` (benunit)
`would_claim_childcare_grant` (person)
`would_claim_disabled_students_allowance` (person)
`would_claim_extended_childcare` (benunit)
`would_claim_marriage_allowance` (person)
`would_claim_parents_learning_allowance` (person)
`would_claim_pc` (benunit)
`would_claim_scp` (person)
`would_claim_targeted_childcare` (benunit)
`would_claim_tfc` (benunit)
`would_claim_travel_grant` (person)
`would_claim_uc` (benunit)
`would_claim_uc_childcare` (benunit)
`would_claim_universal_childcare` (benunit) |
+| `fact:person.take_up_seed` | `child_benefit_opts_out` (benunit)
`would_claim_adult_dependants_grant` (person)
`would_claim_bursary_fund_16_to_19` (person)
`would_claim_care_to_learn` (benunit)
`would_claim_carers_allowance` (person)
`would_claim_child_benefit` (benunit)
`would_claim_childcare_grant` (person)
`would_claim_disabled_students_allowance` (person)
`would_claim_extended_childcare` (benunit)
`would_claim_marriage_allowance` (person)
`would_claim_parents_learning_allowance` (person)
`would_claim_pc` (benunit)
`would_claim_scp` (person)
`would_claim_targeted_childcare` (benunit)
`would_claim_tfc` (benunit)
`would_claim_travel_grant` (person)
`would_claim_uc` (benunit)
`would_claim_uc_at_legacy_closure` (benunit)
`would_claim_uc_childcare` (benunit)
`would_claim_universal_childcare` (benunit) |
| `fact:household.tenure` | `tenure_type` (household) |
| `fact:household.rent` | `rent` (household) |
| `fact:household.mortgage_interest` | `mortgage_interest_repayment` (household) |
@@ -50,13 +50,13 @@ Engine version `2.132.6`; concept schema `5a55669d0447`. Generated by `tools/ref
## Inputs no concept covers
-### benunit (13)
+### benunit (12)
-`baseline_child_benefit_entitlement`, `baseline_income_support_entitlement`, `baseline_pension_credit_entitlement`, `benunit_reported_capital`, `housing_benefit_board_and_attendance_determination`, `in_specified_or_temporary_accommodation`, `liable_for_share_of_household_rent`, `maximum_extended_childcare_hours_usage`, `meals_included_in_rent`, `tax_free_childcare_meets_uk_connection`, `uc_receives_new_claimant_health_element`, `working_tax_credit_run_on`, `would_claim_uc_at_legacy_closure`
+`baseline_child_benefit_entitlement`, `baseline_income_support_entitlement`, `baseline_pension_credit_entitlement`, `benunit_reported_capital`, `housing_benefit_board_and_attendance_determination`, `in_specified_or_temporary_accommodation`, `liable_for_share_of_household_rent`, `maximum_extended_childcare_hours_usage`, `meals_included_in_rent`, `tax_free_childcare_meets_uk_connection`, `uc_receives_new_claimant_health_element`, `working_tax_credit_run_on`
-### household (79)
+### household (81)
-`accommodation_type`, `alcohol_and_tobacco_consumption`, `beer_draught_share`, `beer_litres`, `bus_fare_spending_reported`, `bus_subsidy_spending`, `cash_isa`, `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`, `domestic_energy_consumption`, `domestic_rates`, `ebr_energy_bills_credit_eligible`, `education_consumption`, `electricity_consumption`, `external_child_payments`, `food_and_non_alcoholic_beverages_consumption`, `full_rate_vat_expenditure_rate`, `gas_consumption`, `gross_financial_wealth`, `hand_rolling_tobacco_grams_per_week`, `health_consumption`, `heated_tobacco_grams_per_week`, `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`, `local_authority`, `lpg_kg`, `main_residence_value`, `main_residential_property_purchased_is_first_home`, `miscellaneous_consumption`, `mortgage_debt`, `natural_gas_kg`, `net_financial_wealth`, `non_residential_property_value`, `non_residential_rent`, `num_bedrooms`, `num_vehicles`, `other_fermented_draught_share`, `other_fermented_litres`, `other_residential_property_value`, `other_tobacco_grams_per_week`, `owned_land`, `petrol_spending`, `private_pension_wealth`, `property_purchased`, `rail_usage`, `recreation_consumption`, `region`, `restaurants_and_hotels_consumption`, `savings`, `sparkling_cider_draught_share`, `sparkling_cider_litres`, `spi_imputed`, `spirits_draught_share`, `spirits_litres`, `stocks_and_shares_isa`, `structural_insurance_payments`, `transport_consumption`, `uc_migrated`, `uses_energy_prepayment_meter`, `water_and_sewerage_charges`, `wine_draught_share`, `wine_litres`, `would_evade_tv_licence_fee`
+`accommodation_type`, `additional_residential_property_purchased`, `alcohol_and_tobacco_consumption`, `beer_draught_share`, `beer_litres`, `bus_fare_spending_reported`, `bus_subsidy_spending`, `cash_isa`, `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`, `domestic_energy_consumption`, `domestic_rates`, `ebr_energy_bills_credit_eligible`, `education_consumption`, `electricity_consumption`, `external_child_payments`, `food_and_non_alcoholic_beverages_consumption`, `full_rate_vat_expenditure_rate`, `gas_consumption`, `gross_financial_wealth`, `hand_rolling_tobacco_grams_per_week`, `health_consumption`, `heated_tobacco_grams_per_week`, `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`, `local_authority`, `lpg_kg`, `main_residence_value`, `main_residential_property_purchased_is_first_home`, `miscellaneous_consumption`, `mortgage_debt`, `natural_gas_kg`, `net_financial_wealth`, `non_residential_property_purchased`, `non_residential_property_value`, `non_residential_rent`, `num_bedrooms`, `num_vehicles`, `other_fermented_draught_share`, `other_fermented_litres`, `other_residential_property_value`, `other_tobacco_grams_per_week`, `owned_land`, `petrol_spending`, `private_pension_wealth`, `property_purchased`, `rail_usage`, `recreation_consumption`, `region`, `restaurants_and_hotels_consumption`, `savings`, `sparkling_cider_draught_share`, `sparkling_cider_litres`, `spi_imputed`, `spirits_draught_share`, `spirits_litres`, `stocks_and_shares_isa`, `structural_insurance_payments`, `transport_consumption`, `uc_migrated`, `uses_energy_prepayment_meter`, `water_and_sewerage_charges`, `wine_draught_share`, `wine_litres`, `would_evade_tv_licence_fee`
### person (156)
diff --git a/packages/microcosm-build/pyproject.toml b/packages/microcosm-build/pyproject.toml
index 62f946ace..9a19d4901 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.132.6", "microcosm-data>=0.1,<0.2", "h5py>=3", "tables>=3", "openpyxl>=3.1"]
+uk = ["policyengine-uk>=2.134.4", "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/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py
index c9921a4c7..d876401dc 100644
--- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py
+++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py
@@ -58,6 +58,15 @@
#: exceed one; it is bounded to ``ROLLED_FORWARD_RATIO_BOUNDS`` so a
#: mis-pinned operand cannot pass for growth.
ROLLED_FORWARD_BY_RATIO = "rolled_forward_by_ratio"
+#: ``calendar_year_window_scaled_by_ratio``: the ``calendar_year_window`` of
+#: the reference's own series, translated by the quotient of two facts that
+#: each pin their own period and may come from another publisher: a subset's
+#: share of the published universe, read where it is published (the
+#: individuals' share of HMRC's SDLT receipts by property type restating the
+#: OBR's SDLT lines for households, microcosm#1095). The quotient lies in
+#: ``(0, 1]`` as for ``scaled_by_ratio``; the operands translate the window,
+#: they do not join it.
+CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO = "calendar_year_window_scaled_by_ratio"
ROLLED_FORWARD_OPERAND_ROLES = ("base", "numerator", "denominator")
ROLLED_FORWARD_RATIO_BOUNDS = (0.5, 2.0)
#: Ordered operand roles of ``monthly_window_count_x_mean``.
@@ -74,6 +83,7 @@
"count_x_mean",
"scaled_by_ratio",
ROLLED_FORWARD_BY_RATIO,
+ CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO,
MONTHLY_WINDOW_COUNT_X_MEAN,
*MONTHLY_WINDOW_OPERATIONS,
)
@@ -89,6 +99,7 @@
"count_x_mean",
"scaled_by_ratio",
ROLLED_FORWARD_BY_RATIO,
+ CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO,
MONTHLY_WINDOW_COUNT_X_MEAN,
*MONTHLY_WINDOW_OPERATIONS,
)
@@ -289,6 +300,8 @@ def __post_init__(self) -> None:
_validate_rolled_forward_operands(self.name, self.value_operands)
if self.value_operation == "calendar_year_window":
_validate_calendar_year_window_reference(self)
+ elif self.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO:
+ _validate_calendar_year_window_scaled_by_ratio_reference(self)
elif SOURCE_MEASURE_ID_BY_OPENING_YEAR in self.ledger_selector:
raise ValueError(
f"LedgerTargetReference {self.name!r}: "
@@ -799,8 +812,18 @@ def target_spec_from_ledger_reference(
f"{reference.value_operation!r}."
)
numeric_values = []
- for member in facts:
- _validate_resolved_reference_fact(member, reference)
+ operand_facts = (
+ sum(_window_ratio_operand_counts(reference))
+ if reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO
+ else 0
+ )
+ for index, member in enumerate(facts):
+ if operand_facts and index >= len(facts) - operand_facts:
+ # A ratio operand pins its own source, period and entity: the
+ # reference's consumer pins describe the window, not the operand.
+ _validate_window_ratio_operand_fact(member, reference)
+ else:
+ _validate_resolved_reference_fact(member, reference)
numeric_values.append(_numeric_fact_value(member, reference))
_validate_fact_aggregation(member, reference)
@@ -852,10 +875,30 @@ def target_spec_from_ledger_reference(
for weight, value in zip(weights, numeric_values, strict=True)
)
value_metadata = _calendar_year_window_metadata(reference, facts)
+ elif reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO:
+ numerators, denominators = _window_ratio_operand_counts(reference)
+ cut = len(facts) - numerators - denominators
+ window = facts[:cut]
+ weights = _calendar_year_window_weights(reference, window)
+ base = math.fsum(
+ weight * value
+ for weight, value in zip(weights, numeric_values[:cut], strict=True)
+ )
+ numerator = math.fsum(numeric_values[cut : cut + numerators])
+ denominator = math.fsum(numeric_values[cut + numerators :])
+ numeric_value, ratio_metadata = _scaled_by_ratio_value(
+ reference, [base, numerator, denominator]
+ )
+ value_metadata = {
+ **_calendar_year_window_metadata(reference, window),
+ **ratio_metadata,
+ }
else:
numeric_value = numeric_values[0]
representative_fact = _value_representative_fact(
- facts,
+ _window_ratio_window_facts(reference, facts)
+ if reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO
+ else facts,
operation=reference.value_operation,
)
# A ratio-scaled cell keeps the base cell's identity: the national
@@ -866,6 +909,8 @@ def target_spec_from_ledger_reference(
if reference.value_operation == "scaled_by_ratio"
else facts[:-2]
if reference.value_operation == ROLLED_FORWARD_BY_RATIO
+ else _window_ratio_window_facts(reference, facts)
+ if reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO
else facts
)
publication_metadata = dict(value_metadata)
@@ -1854,6 +1899,13 @@ def _resolve_reference_fact(
return _resolve_calendar_year_window_reference_facts(
reference, eligible_matches
)
+ if (
+ reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO
+ and eligible_matches
+ ):
+ return _resolve_calendar_year_window_scaled_by_ratio_reference_facts(
+ reference, eligible_matches, fact_index.facts
+ )
if reference.value_operation == "latest_plateau" and eligible_matches:
return _resolve_latest_plateau_reference_facts(reference, eligible_matches)
if reference.value_operation == "count_x_mean" and eligible_matches:
@@ -2474,6 +2526,8 @@ def reference_fact_selectors(
selectors.append(dict(reference.ledger_selector))
if reference.value_operation == "scaled_by_ratio":
selectors.extend(_scaled_by_ratio_operand_selectors(reference))
+ if reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO:
+ selectors.extend(_window_ratio_operand_selectors(reference))
if reference.value_operation == ROLLED_FORWARD_BY_RATIO:
if _rolled_forward_base_overlay(reference):
selectors.append(_rolled_forward_base_selector(reference))
@@ -3018,6 +3072,193 @@ def _calendar_year_window_opening_year(
return period_key[1] // 100
+def _validate_calendar_year_window_scaled_by_ratio_reference(
+ reference: LedgerTargetReference,
+) -> None:
+ """A window of the reference's own series, then two pinned ratio operands."""
+
+ prefix = (
+ f"LedgerTargetReference {reference.name!r}: "
+ f"{CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO}"
+ )
+ roles = [
+ str(operand.get("role")) if isinstance(operand, Mapping) else ""
+ for operand in reference.value_operands
+ ]
+ if roles != list(SCALED_BY_RATIO_OPERAND_ROLES):
+ raise ValueError(
+ f"{prefix} requires exactly ordered "
+ f"{'/'.join(SCALED_BY_RATIO_OPERAND_ROLES)} operands, got {roles!r}."
+ )
+ if {key for key in reference.value_operands[0] if key != "role"}:
+ raise ValueError(
+ f"{prefix}: the base operand is the reference's own windowed series "
+ "and takes no overrides."
+ )
+ for operand in reference.value_operands[1:]:
+ if "period_type" not in operand or "period_value" not in operand:
+ raise ValueError(
+ f"{prefix}: operand {operand.get('role')!r} must pin its own "
+ "period_type and period_value; the window's years are the "
+ "base's, not the ratio's."
+ )
+ count = operand.get("expected_member_count", 1)
+ if isinstance(count, bool) or not isinstance(count, int) or count <= 0:
+ raise ValueError(
+ f"{prefix}: operand {operand.get('role')!r} "
+ "expected_member_count must be a positive integer."
+ )
+ if not {key for key in operand} - {
+ "period_type",
+ "period_value",
+ *_WINDOW_RATIO_OPERAND_METADATA_KEYS,
+ }:
+ raise ValueError(
+ f"{prefix}: operand {operand.get('role')!r} needs at least one "
+ "selector field besides its period."
+ )
+ members = _window_ratio_member_keys(operand)
+ if (count > 1 or members) and (
+ len(members) != 1
+ or len({str(value) for value in operand[members[0]]}) != count
+ or len(operand[members[0]]) != count
+ ):
+ raise ValueError(
+ f"{prefix}: operand {operand.get('role')!r} sums {count} "
+ "cell(s), so it names them in exactly one list-valued selector "
+ f"field of {count} distinct member(s), got {members!r}."
+ )
+ 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 "
+ "refused."
+ )
+ if reference.period_match_policy != "latest_not_after":
+ raise ValueError(
+ f"{prefix} resolves the two years overlapping the target calendar "
+ "year itself; declare period_match_policy 'latest_not_after' (the "
+ "default)."
+ )
+ period_key = _period_key_from_value(reference.period)
+ if reference.period is None or not period_key[0] or period_key[1] % 100 != 99:
+ raise ValueError(f"{prefix} requires an explicit calendar-year target period.")
+
+
+#: Keys of a window-ratio operand that are not selector fields.
+_WINDOW_RATIO_OPERAND_METADATA_KEYS = frozenset(
+ ("role", "expected_member_count", "label")
+)
+
+
+def _window_ratio_member_keys(operand: Mapping[str, object]) -> list[str]:
+ """The operand's list-valued selector fields, which name its members."""
+
+ return sorted(
+ str(key)
+ for key, value in operand.items()
+ if key not in _WINDOW_RATIO_OPERAND_METADATA_KEYS
+ and key not in {"dimensions", "dimension_values"}
+ and isinstance(value, (list, tuple))
+ )
+
+
+def _window_ratio_operand_selectors(
+ reference: LedgerTargetReference,
+) -> tuple[Mapping[str, object], ...]:
+ """The numerator and denominator selectors, complete as declared."""
+
+ return tuple(
+ {
+ str(key): value
+ for key, value in operand.items()
+ if key not in _WINDOW_RATIO_OPERAND_METADATA_KEYS
+ }
+ for operand in reference.value_operands[1:]
+ )
+
+
+def _window_ratio_operand_counts(reference: LedgerTargetReference) -> tuple[int, int]:
+ """How many facts the numerator and the denominator each sum."""
+
+ numerator, denominator = (
+ int(operand.get("expected_member_count", 1))
+ for operand in reference.value_operands[1:]
+ )
+ return numerator, denominator
+
+
+def _window_ratio_window_facts(
+ reference: LedgerTargetReference, facts: tuple[object, ...]
+) -> tuple[object, ...]:
+ """The window's own facts, without the operands that translate it."""
+
+ return facts[: len(facts) - sum(_window_ratio_operand_counts(reference))]
+
+
+def _validate_window_ratio_operand_fact(
+ fact: object, reference: LedgerTargetReference
+) -> None:
+ """A ratio operand is checked against the reference's assertion policy."""
+
+ if not _assertion_allowed(reference, fact):
+ raise ValueError(
+ f"Ledger target reference {reference.name!r} assertion_policy="
+ f"{reference.assertion_policy!r} does not allow ratio operand "
+ f"assertion {_fact_assertion(fact)!r}."
+ )
+
+
+def _resolve_calendar_year_window_scaled_by_ratio_reference_facts(
+ reference: LedgerTargetReference,
+ eligible_matches: list[object],
+ facts: tuple[object, ...],
+) -> tuple[object, ...]:
+ """Resolve the window from the selector and each operand exactly once.
+
+ The window's two years come from the reference's own series, as for
+ ``calendar_year_window``. The numerator and denominator are complete
+ selectors over every fact the compile was given, each pinned at its own
+ period, and each must match exactly its declared number of facts (one
+ unless ``expected_member_count`` says otherwise), which it sums.
+ """
+
+ resolved = list(
+ _resolve_calendar_year_window_reference_facts(reference, eligible_matches)
+ )
+ for operand, selector in zip(
+ reference.value_operands[1:],
+ _window_ratio_operand_selectors(reference),
+ strict=True,
+ ):
+ matches = [fact for fact in facts if _fact_matches_selector(fact, selector)]
+ expected = int(operand.get("expected_member_count", 1))
+ if len(matches) != expected:
+ raise ValueError(
+ f"Ledger target reference {reference.name!r}: "
+ f"{CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO} operand "
+ f"{operand.get('role')!r} matched {len(matches)} facts; expected "
+ f"exactly {expected}."
+ )
+ # Each named member matches exactly once: two facts for one member
+ # and none for another would pass the total alone.
+ for key in _window_ratio_member_keys(operand):
+ for member in operand[key]:
+ hits = sum(
+ 1
+ for fact in matches
+ if str(member) in {str(v) for v in _selector_candidates(fact, key)}
+ )
+ if hits != 1:
+ raise ValueError(
+ f"Ledger target reference {reference.name!r}: "
+ f"{CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO} operand "
+ f"{operand.get('role')!r} member {member!r} of {key!r} "
+ f"matched {hits} facts; expected exactly one."
+ )
+ resolved.extend(sorted(matches, key=lambda fact: str(_fact_key(fact))))
+ return tuple(resolved)
+
+
def _resolve_calendar_year_window_reference_facts(
reference: LedgerTargetReference,
eligible_matches: list[object],
@@ -3865,6 +4106,12 @@ def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]:
metadata["ledger_value_formula"] = "minuend - subtrahend"
if reference.value_operation == "scaled_by_ratio":
metadata["ledger_value_formula"] = "base * numerator / denominator"
+ if reference.value_operation == CALENDAR_YEAR_WINDOW_SCALED_BY_RATIO:
+ 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"
+ )
if reference.value_operation == "linear_combination":
metadata["ledger_value_formula"] = _linear_combination_formula(reference)
if reference.value_operation == "calendar_year_window":
diff --git a/packages/microcosm-build/src/microcosm/build/source_manifest.py b/packages/microcosm-build/src/microcosm/build/source_manifest.py
index 11d4425db..ba1514f38 100644
--- a/packages/microcosm-build/src/microcosm/build/source_manifest.py
+++ b/packages/microcosm-build/src/microcosm/build/source_manifest.py
@@ -125,6 +125,9 @@
"gate_distributional_effective_mass",
"gate_zero_weight_strata",
"head_carry",
+ "impute_annual_property_purchases",
+ "assign_regional_home_values",
+ "draw_uc_claim_at_legacy_closure",
"impute_bus_use_band",
"impute_frs_property_finance_costs",
"impute_lifetime_isa_balance",
diff --git a/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json b/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json
index fed77ca62..afa15376b 100644
--- a/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json
+++ b/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json
@@ -9646,6 +9646,228 @@
}
}
},
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind",
+ "knots",
+ "knots_level",
+ "region_map",
+ "rows",
+ "rank",
+ "support_stratum_lower",
+ "stream",
+ "value",
+ "property_wealth",
+ "rank_basis_column"
+ ],
+ "properties": {
+ "kind": {
+ "const": "assign_regional_home_values"
+ },
+ "knots": {
+ "type": "string"
+ },
+ "knots_level": {
+ "type": "string"
+ },
+ "region_map": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "rows": {
+ "type": "string"
+ },
+ "rank": {
+ "type": "string"
+ },
+ "support_stratum_lower": {
+ "type": "number"
+ },
+ "stream": {
+ "type": "array",
+ "items": {
+ "type": [
+ "string",
+ "integer"
+ ]
+ }
+ },
+ "value": {
+ "type": "string"
+ },
+ "property_wealth": {
+ "type": "string"
+ },
+ "rank_basis_column": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind",
+ "outputs",
+ "stocks",
+ "port_of",
+ "minimum_price",
+ "eligibility",
+ "fit_regions",
+ "hazard",
+ "event_score",
+ "threshold",
+ "price",
+ "minimum_value_share",
+ "weights",
+ "streams",
+ "additional_residential_targets",
+ "non_residential_targets"
+ ],
+ "properties": {
+ "kind": {
+ "const": "impute_annual_property_purchases"
+ },
+ "outputs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "stocks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "port_of": {
+ "type": "string"
+ },
+ "minimum_price": {
+ "type": "number"
+ },
+ "eligibility": {
+ "type": "string"
+ },
+ "fit_regions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "hazard": {
+ "type": "string"
+ },
+ "event_score": {
+ "type": "string"
+ },
+ "threshold": {
+ "type": "string"
+ },
+ "price": {
+ "type": "string"
+ },
+ "minimum_value_share": {
+ "type": "number"
+ },
+ "weights": {
+ "type": "string"
+ },
+ "streams": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_salt",
+ "price_salt",
+ "seed"
+ ],
+ "properties": {
+ "event_salt": {
+ "type": "string"
+ },
+ "price_salt": {
+ "type": "string"
+ },
+ "seed": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "additional_residential_targets": {
+ "type": "string"
+ },
+ "non_residential_targets": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind",
+ "output",
+ "port_of",
+ "legacy_benefits",
+ "true_without_draw",
+ "rate",
+ "probability",
+ "p",
+ "stream"
+ ],
+ "properties": {
+ "kind": {
+ "const": "draw_uc_claim_at_legacy_closure"
+ },
+ "output": {
+ "type": "string"
+ },
+ "port_of": {
+ "type": "string"
+ },
+ "legacy_benefits": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "true_without_draw": {
+ "type": "string"
+ },
+ "rate": {
+ "type": "string"
+ },
+ "probability": {
+ "type": "string"
+ },
+ "p": {
+ "type": "string"
+ },
+ "stream": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "salt",
+ "seed"
+ ],
+ "properties": {
+ "salt": {
+ "type": "string"
+ },
+ "seed": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
{
"type": "object",
"additionalProperties": false,
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 a064feb6c..e4eb25dc9 100644
--- a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py
+++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py
@@ -829,6 +829,7 @@ def target_references_resource(
"scaled_by_ratio",
"rolled_forward_by_ratio",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
}
}
),
diff --git a/packages/microcosm-build/src/microcosm/build/uk/country_package.json b/packages/microcosm-build/src/microcosm/build/uk/country_package.json
index d6be95557..096f46099 100644
--- a/packages/microcosm-build/src/microcosm/build/uk/country_package.json
+++ b/packages/microcosm-build/src/microcosm/build/uk/country_package.json
@@ -97,6 +97,16 @@
"kind": "legacy_json",
"schema_id": "legacy_json"
},
+ {
+ "path": "hmrc_stamp_tax_facts.json",
+ "kind": "legacy_json",
+ "schema_id": "legacy_json"
+ },
+ {
+ "path": "dwp_move_to_uc_facts.json",
+ "kind": "legacy_json",
+ "schema_id": "legacy_json"
+ },
{
"path": "obr_hvcts_costing_facts.json",
"kind": "legacy_json",
diff --git a/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json b/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json
new file mode 100644
index 000000000..377caeba3
--- /dev/null
+++ b/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json
@@ -0,0 +1,3726 @@
+{
+ "schema_version": 1,
+ "country": "uk",
+ "kind": "uk_vendored_ledger_facts",
+ "resource": "dwp_move_to_uc_facts.json",
+ "purpose": "DWP Stat-Xplore, households sent a Move to Universal Credit migration notice in Great Britain, notices July 2022 to June 2026, by the legacy benefits they received and their move status (claimed Universal Credit, did not claim as the legacy benefit closed, in progress), with the totals by combination and by status (uk-data#534, microcosm#1095): the uc_legacy_closure_take_up stage's claim rate for a combination is claimed / (claimed + did not claim). No value is derived here.",
+ "consumers": [
+ "uk_runtime.legacy_closure_take_up"
+ ],
+ "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.",
+ "generator": {
+ "tool": "tools/vendor_uk_ledger_facts.py",
+ "version": 1
+ },
+ "source_fact_feed": {
+ "source_repo": "PolicyEngine/chronicle",
+ "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164",
+ "build": "build-bundle --suite uk -> build-consumer-artifact",
+ "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2",
+ "fact_row_count": 1499301,
+ "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b",
+ "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21"
+ },
+ "selections": [
+ {
+ "label": "mtuc_households_by_legacy_benefit_and_move_status",
+ "selector": {
+ "source_name": "dwp",
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06"
+ },
+ "row_count": 57
+ },
+ {
+ "label": "mtuc_households_totals",
+ "selector": {
+ "source_name": "dwp",
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total"
+ },
+ "row_count": 23
+ }
+ ],
+ "row_count": 80,
+ "rows": [
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_88354f51318c4026e1dae3d1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_ea2a5901c5a834fabbe0b5ee",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.all_households__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "all_households__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "all",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 1822966
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_09fd7fc2e84e950299dc154f",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f7612b8d4c9f4aa2bdc97cdc",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.all_households__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "all_households__claimed_uc",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "all",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 1580761
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_8f8279de060318d3e03e397c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c75e337aeaf397873c98ccad",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.all_households__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "all_households__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "all",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 241662
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c533c8c8ce6450a936be6988",
+ "semantic_fact_key": "ledger_semantic_fact_v2_76860ce27e5f311472844fc4",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.all_households__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "all_households__in_progress",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "all",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 538
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e566a8e8030a3352ed65b980",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f30ba5fb6264bef1b0def972",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_employment_support_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_employment_support_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Employment Support Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 11557
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_bda036f4c64f60d6da586e15",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4184546ef6e725f944beb60a",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_employment_support_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_employment_support_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Employment Support Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 11171
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2c44a92352ac477b61e7c633",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e0c3e4e1a9fc933e8c8988d9",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Employment Support Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 381
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_1243c63edcb178e6ea35eb1b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e1416c608a459750941df009",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_employment_support_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_employment_support_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Employment Support Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b833dc68908de421984fd0e4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_90b0a238898da693f5fe2ae1",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_housing_benefit__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 16685
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_7429e056b1b103354fdefee8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d0a886b846fd163bc9fb0f6c",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 15646
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_01e35c756659ea74eeb3dc8a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_389a787bf533d2430d628779",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 1042
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2b3a2841cb4b7163a01d010e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9a092cfd7c72a00de6db1b08",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a3cc2d0bce752748ad5ca597",
+ "semantic_fact_key": "ledger_semantic_fact_v2_800d74031fb22d6714ac24da",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_housing_benefit_and_employment_support_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_employment_support_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Employment Support Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 74805
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e3e8038b50dfe2137afafe7e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_267ffc13c71f07c7dcb85108",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_employment_support_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_employment_support_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Employment Support Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 73859
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_99c4a53ee58d36adb19defe7",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9940c5fabeac93e7249f386e",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Employment Support Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 949
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_12e671822a2674c695459434",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c715ca09e4f90292ab66421f",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_employment_support_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_employment_support_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Employment Support Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_77fa4815963c08f79414aa33",
+ "semantic_fact_key": "ledger_semantic_fact_v2_78d2bee70b47e8195defda0a",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_housing_benefit_and_income_support__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_income_support__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Income Support",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 59457
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6f2c963c0567238b9c62bd76",
+ "semantic_fact_key": "ledger_semantic_fact_v2_18d4b89f06ed654baca0d6ab",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_income_support__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_income_support__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Income Support",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 58764
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_717f17efce5558879855ad33",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2c21d8c6df780323d955985f",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_income_support__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_income_support__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Income Support",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 691
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e4914d0e2a69221db8c00a9d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_94ea8100770b7e53a4e37ed3",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_income_support__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_income_support__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Income Support",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0d684ae01373e40a9a2177d7",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0c06db046e0b28008e71276f",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_housing_benefit_and_jobseekers_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_jobseekers_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Jobseekers Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 2320
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c01118e1ecba208b273068d4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_59227d0505e938d118efe36d",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_jobseekers_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_jobseekers_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Jobseekers Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 2286
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b741ae699cb2d880eaa2fee4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_5129ed024b483ce4eae7d571",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Jobseekers Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 30
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b8349ac68ce18ea148b0cdde",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1ac2ab9a8650621f82ccfeb2",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_housing_benefit_and_jobseekers_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_housing_benefit_and_jobseekers_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Housing Benefit and Jobseekers Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_bc5b5a533a3e8a39d6f385ce",
+ "semantic_fact_key": "ledger_semantic_fact_v2_ea553b225b0c05f16c715ca3",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_income_support__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_income_support__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Income Support",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 8529
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_27d9bd72581f66ddb576372b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d4cf922aa3f320cddcfc85ee",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_income_support__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_income_support__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Income Support",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 8254
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ddb8ca1a5793f0134c567f22",
+ "semantic_fact_key": "ledger_semantic_fact_v2_3ba2cfc05af1f82dd0b20e4f",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_income_support__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_income_support__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Income Support",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 276
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_21169cefc9ffadfab2c8dac5",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d240a87f583e1755a49c5375",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_income_support__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_income_support__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Income Support",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_66733bf7c2b58e77b1a6f64f",
+ "semantic_fact_key": "ledger_semantic_fact_v2_b81105f1c485c376e57969ac",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_jobseekers_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_jobseekers_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Jobseekers Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 388
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a3ed5efb83aa9edebe0b2164",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4bfaa9fdb9b24522476db579",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_jobseekers_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_jobseekers_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Jobseekers Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 381
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_64e4d8b4fdde60f4bd61ab0d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0dcb38e312fdab42a28a0b59",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Jobseekers Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 8
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a888931822155bd9882bcc60",
+ "semantic_fact_key": "ledger_semantic_fact_v2_177bf719bdbcee40c72684c1",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_jobseekers_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_jobseekers_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Jobseekers Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e787a908b19d5304462deba9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_edc604950b5b51df4c875676",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_working_tax_credit__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 490379
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b98603fce5fa339ea19c395d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_6ada4d4ee8a0868113df972e",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 363984
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_29064d4fb75cf802501e7c57",
+ "semantic_fact_key": "ledger_semantic_fact_v2_dac22838863d9492dcf9192d",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 126397
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_28cebe397a3d15cbed0b530d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_64c958ba6e5a7e8b52e3ec7c",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_24bb6781292d4e2abc16ca1a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0c59c10fd1c16dd3bdf0dd36",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_and_working_tax_credit_and_housing_benefit__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit_and_housing_benefit__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit and Housing Benefit",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 87309
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_48f983ec44bfcd36f10b21aa",
+ "semantic_fact_key": "ledger_semantic_fact_v2_eb5a4c32d486afc8d9b1bcc2",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit_and_housing_benefit__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit_and_housing_benefit__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit and Housing Benefit",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 81962
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2737e8b72993d4b1ab11a707",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0bd61f30e2220b80d45dac59",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit and Housing Benefit",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 5352
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_3f9bcd40bb2eb9dc04521dc6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7b15cfcd26788ec74676ea68",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_and_working_tax_credit_and_housing_benefit__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_and_working_tax_credit_and_housing_benefit__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit and Working Tax Credit and Housing Benefit",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f19eb0a19729095b0a9206d8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c0c5978b6cf30c6d7422d201",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.child_tax_credit_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 54454
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0af78af71cf02c75e1227d06",
+ "semantic_fact_key": "ledger_semantic_fact_v2_cafe8e3da63cfe27ef2e046a",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 36723
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ebb1d5b1e0100e4d769c33f9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1429e219345ab102b56772c0",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 17733
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d41739b06dda111d4ed18bef",
+ "semantic_fact_key": "ledger_semantic_fact_v2_81b43f10f465b85ec436cdfb",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.child_tax_credit_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "child_tax_credit_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Child Tax Credit only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2c34688c16fea04e638bd2dd",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a9ff954eb58d808f73539a8d",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.employment_support_allowance_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "employment_support_allowance_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Employment Support Allowance only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 335190
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_4eee68a8047084fb404286fd",
+ "semantic_fact_key": "ledger_semantic_fact_v2_61da37fa81e1f22b9ebd727c",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.employment_support_allowance_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "employment_support_allowance_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Employment Support Allowance only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 321075
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_23f280a8c406d2f2ee723193",
+ "semantic_fact_key": "ledger_semantic_fact_v2_806e3c7da20a635220ed5bea",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.employment_support_allowance_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "employment_support_allowance_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Employment Support Allowance only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 13944
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b97711c4c3361018a389f15c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_85d5cd61467df43983f94484",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.employment_support_allowance_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "employment_support_allowance_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Employment Support Allowance only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 167
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_204ea8b98cd982e8d51db8fd",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7835d732aee5c1997838d816",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.housing_benefit_and_employment_support_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_employment_support_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Employment Support Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 457466
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9dd889d1fd2e43b68d53c325",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d74288611f2765ea674adf12",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_employment_support_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_employment_support_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Employment Support Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 448253
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ad56940381db0dd4219696d8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d055f2c867e02a68053fae84",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_employment_support_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Employment Support Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 9117
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e5dcb1ed674a950796b91303",
+ "semantic_fact_key": "ledger_semantic_fact_v2_3ffb1e185a322f59d8238f3f",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_employment_support_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_employment_support_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Employment Support Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 93
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_4f15d5e81896a959c7195652",
+ "semantic_fact_key": "ledger_semantic_fact_v2_85ffff61527f36d80ad5dabb",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.housing_benefit_and_income_support__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_income_support__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Income Support",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 31833
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2eed6a6fa0143b30751916fb",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a97c75f47572ef6179883f32",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_income_support__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_income_support__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Income Support",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 31087
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9ee637fb65c46dfadae23d67",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e908b82621de21298cb63a69",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_income_support__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_income_support__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Income Support",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 750
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c5c3b6a1f72277a57d5ae58c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_8d83155d8c5bd8db56a4c2c4",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_income_support__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_income_support__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Income Support",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_16751eefc2acd349b466f647",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1ea7ce6f3a9c6006baa81640",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.housing_benefit_and_jobseekers_allowance__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_jobseekers_allowance__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Jobseekers Allowance",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 11352
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9bdbf0743eb55813ccc6974b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_91f0912def4fdc82e4a02385",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_jobseekers_allowance__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_jobseekers_allowance__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Jobseekers Allowance",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 11019
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_deee688a6078a0f606e2cfe8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_62498181270e694fec809d70",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_jobseekers_allowance__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Jobseekers Allowance",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 333
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_af43dcb677ce9ce81c467649",
+ "semantic_fact_key": "ledger_semantic_fact_v2_54b3465ef96e4598a5038434",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_and_jobseekers_allowance__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_and_jobseekers_allowance__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit and Jobseekers Allowance",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_3fac567a47637d2f2fbc2d25",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a19a0c90c0701e5c0596cb0b",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.housing_benefit_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 41300
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_5849c7514da2144fa2b135b6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d772733cbea3beec5d22aff8",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 30900
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f411b53a9c7b7baf4524958c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0e7c0d50f4f6fb92e0b598d9",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 10121
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_fd6d41bfe288edec90be1172",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a59905108ed272e356604020",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.housing_benefit_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "housing_benefit_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Housing Benefit only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 280
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_971afb0a4d9e9a7456fd124b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_699b13ee613803bfb7db6c86",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.income_support_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "income_support_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Income Support only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 19067
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_7db205439284c268c8a86bff",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c3d642b38fdc99848c9f1d26",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.income_support_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "income_support_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Income Support only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 17719
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0bb802697b4809951e2c82ec",
+ "semantic_fact_key": "ledger_semantic_fact_v2_ed8fe6928da3b6ee5da1e400",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.income_support_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "income_support_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Income Support only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 1351
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a7e307d3c534248f1ea645cf",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2465e14f39d362b9cec54c86",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.income_support_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "income_support_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Income Support only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6b9d0b7aed60246a273ac727",
+ "semantic_fact_key": "ledger_semantic_fact_v2_15cdb75f3a82b317207f31ad",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.jobseekers_allowance_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "jobseekers_allowance_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Jobseekers Allowance only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 6199
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_1d3a3ac14e2cf3edaac15c0b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_284086a4d211acd8c11eaa69",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.jobseekers_allowance_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "jobseekers_allowance_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Jobseekers Allowance only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 5867
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ac5fd7ac564a0a050d2e0804",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9658c424a5fea44a286ae7cc",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.jobseekers_allowance_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "jobseekers_allowance_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Jobseekers Allowance only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 329
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_dae08158212ac37c7b79a985",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4e03587270ad10abf54e30df",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.jobseekers_allowance_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "jobseekers_allowance_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Jobseekers Allowance only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_29762356aa9d435594bae2e5",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a6c81ff96facf8dd3c1d50ff",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.working_tax_credit_and_housing_benefit__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_and_housing_benefit__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit and Housing Benefit",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 8866
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_12775adbd731c8b2436865a4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_b9d1467dba92a6afd0a682fd",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_and_housing_benefit__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_and_housing_benefit__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit and Housing Benefit",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 7820
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b522ebe2f5ab99e4adebe604",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7f68a7b05c1193a2d2f502d8",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_and_housing_benefit__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit and Housing Benefit",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 1042
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_92f4eeec83dc9aac27dc3480",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9b45d4a45633a89de5a1f925",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_and_housing_benefit__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_and_housing_benefit__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit and Housing Benefit",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_387b467c3be2e2d5b540c0b9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2df90a3a28ac7977f814fab5",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total.working_tax_credit_only__all_statuses.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_only__all_statuses",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit only",
+ "move_status": "all"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 105802
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d84481517353c7f95b29ac70",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c3d69bd225f0aaa28c552cfe",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_only__claimed_uc.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_only__claimed_uc",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit only",
+ "move_status": "Claimed UC"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 53993
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_19046b2b55ed78f664253be8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_32d7dabc08ec4e6383ec4376",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_only__did_not_claim_uc___legacy_benefit_closed.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_only__did_not_claim_uc___legacy_benefit_closed",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit only",
+ "move_status": "Did not claim UC - Legacy benefit closed"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 51805
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f032ce0d60c2b2a5ac53b139",
+ "semantic_fact_key": "ledger_semantic_fact_v2_378cae5e868169c382386e11",
+ "source_record_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.working_tax_credit_only__in_progress.households_sent_migration_notice",
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "measure_id": "households_sent_migration_notice",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "household",
+ "role": "migration_notice_household"
+ },
+ "geography": {
+ "id": "K03000001",
+ "level": "country",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "month",
+ "value": "2026-06"
+ },
+ "period_coverage": {
+ "start_date": "2022-07-01",
+ "end_date": "2026-06-30",
+ "basis": "calendar"
+ },
+ "layout": {
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "groupby_dimension": "dwp.mtuc_legacy_benefit_move_status",
+ "groupby_value_id": "working_tax_credit_only__in_progress",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "legacy_benefit": "Working Tax Credit only",
+ "move_status": "In Progress"
+ },
+ "source": {
+ "source_name": "dwp",
+ "source_table": "Households invited to Move to Universal Credit by Legacy Benefit and Move Status, notices July 2022 to June 2026",
+ "source_file": "mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json",
+ "source_sha256": "5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f",
+ "vintage": "stat_xplore_extracted_2026_10_15",
+ "raw_r2_key": "raw/uk/dwp/dwp-mtuc-households-legacy-benefit-move-status-july-2022-june-2026/2026/5c238500100b87d136008b5a8ed1a610e628bff43a890763181d4723a463443f/mtuc_households_legacy_benefit_move_status_july_2022_june_2026.json"
+ },
+ "value": 0
+ }
+ ]
+}
diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json
index aae6d2be7..0c4438029 100644
--- a/packages/microcosm-build/src/microcosm/build/uk/gates.json
+++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json
@@ -944,7 +944,9 @@
"benunit.uc_deduction_type_random_draw",
"benunit.uc_latent_deduction_rate",
"benunit.uc_reported_capital",
+ "benunit.would_claim_uc_at_legacy_closure",
"benunit.would_claim_uc_childcare",
+ "household.additional_residential_property_purchased",
"household.atomic_area_basis",
"household.atomic_area_code",
"household.atomic_area_system",
@@ -981,6 +983,7 @@
"household.lsoa_code",
"household.mortgage_debt",
"household.msoa_code",
+ "household.non_residential_property_purchased",
"household.num_vehicles",
"household.oa_code",
"household.ons_household_type",
diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json
new file mode 100644
index 000000000..b80f1318c
--- /dev/null
+++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json
@@ -0,0 +1,5219 @@
+{
+ "schema_version": 1,
+ "country": "uk",
+ "kind": "uk_vendored_ledger_facts",
+ "resource": "hmrc_stamp_tax_facts.json",
+ "purpose": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), the 2024-25 rows the property purchases stage fits households' additional-dwelling and non-residential purchases to (uk-data#573, microcosm#1095): Table 6b transactions paying the higher rates on additional dwellings, every buyer, by price band (the HRAD transactions, value and receipts); Table 8a residential transactions, value and receipts for individuals and for other buyers (the individuals' shares that allocate HRAD to households); and Table 8b non-residential transactions, value and receipts for individuals, by price band. Every fact covers England and Northern Ireland and transactions of GBP 40,000 or above. No value is derived here.",
+ "consumers": [
+ "uk_runtime.property_purchases"
+ ],
+ "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.",
+ "generator": {
+ "tool": "tools/vendor_uk_ledger_facts.py",
+ "version": 1
+ },
+ "source_fact_feed": {
+ "source_repo": "PolicyEngine/chronicle",
+ "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164",
+ "build": "build-bundle --suite uk -> build-consumer-artifact",
+ "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2",
+ "fact_row_count": 1499301,
+ "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b",
+ "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21"
+ },
+ "selections": [
+ {
+ "label": "table6b_fy2024_hrad",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024"
+ },
+ "row_count": 44
+ },
+ {
+ "label": "table8a_fy2024_residential_individuals",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024"
+ },
+ "row_count": 21
+ },
+ {
+ "label": "table8a_fy2024_residential_other_buyers",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024"
+ },
+ "row_count": 24
+ },
+ {
+ "label": "table8b_fy2024_non_residential_individuals",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+ },
+ "row_count": 21
+ }
+ ],
+ "row_count": 110,
+ "rows": [
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6f79398f2c6ed744d951218a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_516b790122c31b0282df9eea",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.all_price_bands.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 77970000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2e945f693f00f6878eb6eecf",
+ "semantic_fact_key": "ledger_semantic_fact_v2_784da1d6db19b5662f198b40",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1_5m_to_2m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 3515000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0c9bacaef76e93913334e235",
+ "semantic_fact_key": "ledger_semantic_fact_v2_22c66107033844cd00f46bc9",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1m_to_1_5m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 6545000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_74ce830c8ea3026f5ef0c4be",
+ "semantic_fact_key": "ledger_semantic_fact_v2_40c1de6e6b1238f55bd9f873",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_or_less.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 16635000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_fe79afe69c894a3fe46f3765",
+ "semantic_fact_key": "ledger_semantic_fact_v2_8d94b79caf6bedb1417a09c9",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_to_500k.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 21510000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c3cfce91ed7512e6f1b76693",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f1a5d54654efb8420585caa9",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_2m_to_3m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_2m_to_3m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_2m_to_3m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 3330000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a40eb168024c8b6b6a85987c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_21734f84919efaa398cacd3a",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_3m_to_4m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_3m_to_4m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_3m_to_4m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1840000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_016a2db3a48426018e089900",
+ "semantic_fact_key": "ledger_semantic_fact_v2_22d98602962102b8f415938b",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_4m_to_5m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_4m_to_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_4m_to_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1125000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_7a555432da56f1db4d05c156",
+ "semantic_fact_key": "ledger_semantic_fact_v2_dada16de87c9b4fec150ca94",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_500k_to_1m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 18770000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_7169f70e1a0f644662a3353e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4fbc550f276a7c265c0ff1bb",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_5m_to_10m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_5m_to_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_5m_to_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2225000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_69ace7d618a0d921e1e75bb8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_8a4c9787af68a31facc73ae7",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.over_gbp_10m.hrad_property_value",
+ "concept": "hmrc.sdlt.hrad_property_value",
+ "measure_id": "hrad_property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "over_gbp_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2470000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_4971b7ca29017e8bc09b1bdc",
+ "semantic_fact_key": "ledger_semantic_fact_v2_19cce82a65978bf9afcf6061",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.all_price_bands.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 5435000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_25ef648685de4dca39b821d1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_fecdfdd8031f676342c1e1e3",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1_5m_to_2m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 365000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a0b875ca7b14d643b3ca4eb2",
+ "semantic_fact_key": "ledger_semantic_fact_v2_b02210a7861c1928d43abcd8",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1m_to_1_5m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 575000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a8775a38645bf8cdddd3f5cf",
+ "semantic_fact_key": "ledger_semantic_fact_v2_438cb00088fe7de66001e780",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_or_less.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 625000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_886f809b27ba0763a1f7e6a6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7fea0d0d39f56177a9765f9c",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_to_500k.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1110000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9691a399560157f53a1d0f4c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_871f1ba54741bdf7b0da0429",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_2m_to_3m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_2m_to_3m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_2m_to_3m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 390000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9c1f29bbf3835157724e38ce",
+ "semantic_fact_key": "ledger_semantic_fact_v2_16bbd3c0f841087e5d63e447",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_3m_to_4m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_3m_to_4m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_3m_to_4m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 235000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_211cc38264fd98d4bbd790b0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a55c0bfce8cd6b28a4b1dc62",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_4m_to_5m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_4m_to_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_4m_to_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 150000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_cf9ef40074620305e00e002a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_82745125feef2bf87e3e1bd8",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_500k_to_1m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1280000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_444c8a41a0a6ca4bd6001c7d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_735d5264699986700b303f9c",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_5m_to_10m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_5m_to_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_5m_to_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 315000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0d6d48fc745b4d40bb10ec55",
+ "semantic_fact_key": "ledger_semantic_fact_v2_b8685bfc21c55b0ec4707565",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.over_gbp_10m.hrad_receipts_gross",
+ "concept": "hmrc.sdlt.hrad_receipts_gross",
+ "measure_id": "hrad_receipts_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "over_gbp_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 385000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d7b7edc809ea5e887553f787",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7122c5be26558bc914eefbb5",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.all_price_bands.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2790000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_16c1a982dcafed8a42ce99a1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a3b06246dd88ae099f8dc601",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1_5m_to_2m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 125000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_04ef14ad9e8861c7f2f2c122",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2fb646350e4dcaa1bd8e5f54",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1m_to_1_5m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 230000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_255f00df9149247ca4938cb7",
+ "semantic_fact_key": "ledger_semantic_fact_v2_17a4e525bbe7002b6404f9da",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_or_less.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 610000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f0226da3503e2493b4ed2ee6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c7a5719cd88b8c692cd164b5",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_to_500k.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 780000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c2e3b3b477f9dc6486f712bc",
+ "semantic_fact_key": "ledger_semantic_fact_v2_bedaa4fd0d06a416ff0c62af",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_2m_to_3m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_2m_to_3m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_2m_to_3m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 115000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f37788632291320604e77bb1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_35996efd1d724a037175e4d4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_3m_to_4m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_3m_to_4m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_3m_to_4m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 65000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9c4db75b153417fd6563878c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f1e5780f69e2e5537802e364",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_4m_to_5m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_4m_to_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_4m_to_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 35000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f5551d11d580e71b875e5f6d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_629c36ec8a33b7e050bf053a",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_500k_to_1m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 675000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9e551fd7a250d8c5b166dab3",
+ "semantic_fact_key": "ledger_semantic_fact_v2_fed88569fd8c423fd291c0dc",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_5m_to_10m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_5m_to_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_5m_to_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 75000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6e30a835dbd57d5e8c4b8b17",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a1617b8bc0594fc43c3f64a7",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.over_gbp_10m.hrad_surcharge_element_gross",
+ "concept": "hmrc.sdlt.hrad_surcharge_element_gross",
+ "measure_id": "hrad_surcharge_element_gross",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "over_gbp_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 80000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_4b16c125c2f7f02f4b73db2e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_35903d7b3e3d43a8f42aa2a4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.all_price_bands.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 211700
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_28881f26e23a847d503451d2",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1492abfd37b2ca7718f1e241",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1_5m_to_2m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e8af52c73c3e9d0684068cd0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_43edf61a855df61e348e20c6",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_1m_to_1_5m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 5300
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_db546b1f2c8a7f9e1980509f",
+ "semantic_fact_key": "ledger_semantic_fact_v2_89e22ee2b778af6971472022",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_or_less.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 113500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d083d5512009e71b4cccc4d6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_248463ce0a1c3992de8274ed",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_250k_to_500k.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 60700
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_268142cf2d76b8fbd12626cd",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d721c09249865b50e21e5311",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_2m_to_3m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_2m_to_3m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_2m_to_3m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1400
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9c05ee48235d27a49bc33082",
+ "semantic_fact_key": "ledger_semantic_fact_v2_5fcd39c7c6efc97031172a82",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_3m_to_4m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_3m_to_4m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_3m_to_4m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_819ca443b9d1b13835a2df6c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1d4bbabddc7cc916bf2b0760",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_4m_to_5m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_4m_to_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_4m_to_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 300
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_18c09b079c62a50b9e8c4684",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d7f485c695682c88da28f803",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_500k_to_1m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 27500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c1a27aa2b53dc88f79091935",
+ "semantic_fact_key": "ledger_semantic_fact_v2_af029fd9b8338f469b8f01f5",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.gbp_5m_to_10m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_5m_to_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "gbp_5m_to_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 300
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c5541aa53b5fe6e2ac78036a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a978fc02e6a2fc65bd03e846",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024.over_gbp_10m.hrad_transactions",
+ "concept": "hmrc.sdlt.hrad_transactions",
+ "measure_id": "hrad_transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_10m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_higher_rates": "additional_dwellings",
+ "sdlt_price_band": "over_gbp_10m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 100
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_92a1c7b65453e1b3d38f81f6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_20371c0103f98e5148e4aa13",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.all_price_bands.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 7640000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_5ff0492fcd47588a72e36bea",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e888fc799ac02f43a3ca966f",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.all_price_bands.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 335515000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d06186ca491c496f3c0e2cc0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4c75d65793bc9c0202b811b4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.all_price_bands.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 44690000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_60108b37166a5caa2c2f52a0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2f9003305fb546ccd1574afc",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.corporate_bodies_flat_rate.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "corporate_bodies_flat_rate",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "corporate_bodies_flat_rate",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 405000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e16e923a4caef21a24bc74de",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f6490dc882765d1af38ae80c",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1_5m_to_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 445000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_11d805fb3564dbd2ccfa97e0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_10de1493c79487a0ef252385",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1_5m_to_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 9280000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_3106c84809f5fc4f1eae68fb",
+ "semantic_fact_key": "ledger_semantic_fact_v2_53c19328067d694c48698e1b",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1_5m_to_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 995000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c99a46d8381c8b70827543e6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_91c713d5617202f15c9630c7",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1m_to_1_5m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 650000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_405a762b90b409c4665e8e52",
+ "semantic_fact_key": "ledger_semantic_fact_v2_df38bb2c3554d46c41c51839",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1m_to_1_5m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 21475000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d89aeacdb5be1fe9b5e61799",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a460ffc50f6bf1e0f898c262",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1m_to_1_5m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1880000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_cd07e3a0e9306bc294289942",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e7eb5f9bf8670a5766d0fcf9",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_or_less.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1560000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_08c2b13ec365898a6b309e21",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c771010c28ac50224b3c72a3",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_or_less.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 63600000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_cec2df0c74e2c57775139c98",
+ "semantic_fact_key": "ledger_semantic_fact_v2_45c5115e6de6cc29335c6413",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_or_less.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 10945000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_12467c8d625b677f40d514fa",
+ "semantic_fact_key": "ledger_semantic_fact_v2_ad93b7f2963b3e51b8ba9b87",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_to_500k.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1210000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d220a2240cf086962cc9de92",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9f16d45d0c05fb906c401043",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_to_500k.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 133030000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6424722b4e755fe5308019e9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0f1e528bc8b1857512e0ed47",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_to_500k.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 12125000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d2bc743c1e88aced1469ebfa",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4d604bb2e1510872ee92c50d",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_500k_to_1m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1100000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f8c3d5c3791d309480a584b9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7c2d39c4bb2e62bbb292da5b",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_500k_to_1m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 89575000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_2d66855ef3edc31dc05186a6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1863dfb3330c03130188edff",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_500k_to_1m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 6260000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_6a616e396fc6017f529396a3",
+ "semantic_fact_key": "ledger_semantic_fact_v2_010ea1fe9904d1492a89c52b",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.over_gbp_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2675000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0eb74fb6bd8b3a0262d18ed7",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d143b6db99520f4650825e9f",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.over_gbp_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 18555000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_f255f2858ee2a2be9cb9cae9",
+ "semantic_fact_key": "ledger_semantic_fact_v2_c80aeda23ee78e7391a686b0",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.over_gbp_2m.property_value",
+ "concept": "hmrc.sdlt.property_value",
+ "measure_id": "property_value",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 12080000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_fffab2a3ee7248dac7a544f4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1a9dc91e9ff5a47ae308782a",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.all_price_bands.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 245000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_b98d35e188481ee9ae9cc08e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_cd87b6113431bbcce66d6b0c",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.all_price_bands.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 9145000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_fe37deebf3d47ad90e93d573",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a1e7588dc6bf7a924d703a99",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.all_price_bands.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1230000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c6009c16f06be446e90dcb17",
+ "semantic_fact_key": "ledger_semantic_fact_v2_408bb067b4a851d6c881a226",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.corporate_bodies_flat_rate.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "corporate_bodies_flat_rate",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "corporate_bodies_flat_rate",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 65000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a60173d5d9dda9ea845038e1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_394a4105f8e1eda1088b7bd4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1_5m_to_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 20000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_26a6d5060d3e6a9b87d063ec",
+ "semantic_fact_key": "ledger_semantic_fact_v2_25c5b4ccbac6648a5b6156da",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1_5m_to_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 700000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e68ecf8df153a46f15242c4e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_db5cd1939f0a6a74cb3a5bd4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1_5m_to_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 45000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_14020376dd921ad9a90b135f",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f22a0624b846f2d7033f71e4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1m_to_1_5m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 25000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_be507677ae46bb945cf17178",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1321c5e3455eac6134e87e8f",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1m_to_1_5m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1240000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d98b40987d7810504dce6226",
+ "semantic_fact_key": "ledger_semantic_fact_v2_448395f497c868cbcdbcfe96",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1m_to_1_5m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 80000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_e9024cb84e94c3b2f0e3c6f5",
+ "semantic_fact_key": "ledger_semantic_fact_v2_7d2440a65ddde4c20f649446",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_or_less.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 15000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_63f8f00a1cb671b000640cb0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_16aa1090b54977d555463a22",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_or_less.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 345000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_3df6627003c59581cbb6f9c8",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e79e5f4358fd1cfee6cab52a",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_or_less.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 265000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_7a543ae5f4dbc15aeeb72c70",
+ "semantic_fact_key": "ledger_semantic_fact_v2_519661e912dc943fade6c6f6",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_to_500k.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 25000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_bebf57b3881d2a222138d31e",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9d60862a6616b29c3927928f",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_to_500k.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1820000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_c86e8aaac4e8bb72ae3ee3b0",
+ "semantic_fact_key": "ledger_semantic_fact_v2_5db40844701aed4f3b76bb17",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_to_500k.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 325000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_823bd987cd5b6316e1447612",
+ "semantic_fact_key": "ledger_semantic_fact_v2_5ceaa5e9ef45268df94d5d2c",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_500k_to_1m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 40000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_58a67413c5088669574dba7f",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f1852af0e88bcea2fbb002b7",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_500k_to_1m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 3040000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ab2e04ca0602f8c0c2f26aea",
+ "semantic_fact_key": "ledger_semantic_fact_v2_810836231cfc36e110a0e4db",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_500k_to_1m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 240000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_9c712262dea2fea89dd5315a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1f0fe62ac8afe7c45a840783",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.over_gbp_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 125000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_417f048d37da32a6dcbe299d",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a020da7bd24a105fbc4aa625",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.over_gbp_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 2000000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_4cbe92399353d015ab2a716c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_43503cfc4bd1f004f6702887",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.over_gbp_2m.receipts",
+ "concept": "hmrc.sdlt.receipts",
+ "measure_id": "receipts",
+ "unit": "gbp",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 205000000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a079475d50129f51288b8589",
+ "semantic_fact_key": "ledger_semantic_fact_v2_8307212ba3e3262764db31af",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.all_price_bands.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 25000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_a869f35392d67d6012cdeecb",
+ "semantic_fact_key": "ledger_semantic_fact_v2_2b0b84841469eb03d395b0f9",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.all_price_bands.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 925100
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0cd8cbdf270888586cef3c2a",
+ "semantic_fact_key": "ledger_semantic_fact_v2_cb150298c119d205f8c53c88",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.all_price_bands.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "all_price_bands",
+ "table_record_kind": "total"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 124500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_0ebbcd335018d24c0f2ebd3c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_78dfabd98dadb3b1228f731f",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.corporate_bodies_flat_rate.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "corporate_bodies_flat_rate",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "corporate_bodies_flat_rate",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 100
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_8a6314b95fda4130fb5b2df3",
+ "semantic_fact_key": "ledger_semantic_fact_v2_caa63a5ab20218b43ac03900",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1_5m_to_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 300
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_430cc40419dd5839eeed9353",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f473d284d552496059401ebd",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1_5m_to_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 5400
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_003d646c99b46414b9ce8b79",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a3d01dbac6e5483caa83d3a4",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1_5m_to_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1_5m_to_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1_5m_to_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 600
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_1c9443ecf2cb97964b05203b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1c590fb7313fcbb3c0a3c6b1",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_1m_to_1_5m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_8d3472c773a2a198c7c883c6",
+ "semantic_fact_key": "ledger_semantic_fact_v2_3218bed01cf81ae0fb6e4e75",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_1m_to_1_5m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 17700
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_639a7e11bb766ef505cf8dfb",
+ "semantic_fact_key": "ledger_semantic_fact_v2_cf8dd79893dc4be42f361604",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_1m_to_1_5m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_1m_to_1_5m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_1m_to_1_5m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_ae8cf458131781eee4c17a9b",
+ "semantic_fact_key": "ledger_semantic_fact_v2_bb5268a23f3e458a7d6ea4be",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_or_less.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 18800
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_d39fed8942cdc26c42a9b3e4",
+ "semantic_fact_key": "ledger_semantic_fact_v2_727f9c78a8bc731427e7fa05",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_or_less.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 388100
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_57da6cc1317a156de3d5be82",
+ "semantic_fact_key": "ledger_semantic_fact_v2_6743c7bd0938b30bbe643d75",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_or_less.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_or_less",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_or_less",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 77000
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_bf6980cbeb2d8f7a1f04d2ad",
+ "semantic_fact_key": "ledger_semantic_fact_v2_9dcd1564df2c52b676282543",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_250k_to_500k.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 3400
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_093b98e7d42bfa74100ecefd",
+ "semantic_fact_key": "ledger_semantic_fact_v2_e4cb558de5eaaf13d27dfff3",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_250k_to_500k.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 374500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_58aaccab5d965a8187e386f1",
+ "semantic_fact_key": "ledger_semantic_fact_v2_0fb10c153e72da38eb782190",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_250k_to_500k.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_250k_to_500k",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_250k_to_500k",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 34900
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_fcd29efb47feee8a56fb1a28",
+ "semantic_fact_key": "ledger_semantic_fact_v2_f8b279d1dbc58c0edbc6e379",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.gbp_500k_to_1m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1600
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_5beb1cfe4e62e5d07e6cdd53",
+ "semantic_fact_key": "ledger_semantic_fact_v2_4e8590e0234f84042cf9eeb8",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.gbp_500k_to_1m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 134600
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_1e837c33bf2adb987dd33b35",
+ "semantic_fact_key": "ledger_semantic_fact_v2_a5e06a69a96ff6bf50959e7e",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.gbp_500k_to_1m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "gbp_500k_to_1m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "gbp_500k_to_1m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 9400
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_cd457a1125ae23d280d80743",
+ "semantic_fact_key": "ledger_semantic_fact_v2_978d71778fbdfdea9de163f1",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.over_gbp_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "non_residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 500
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_572c76881b6021b0cd7e3d5c",
+ "semantic_fact_key": "ledger_semantic_fact_v2_d5d1ce611c296eb9a4260734",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.over_gbp_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "individuals",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 4900
+ },
+ {
+ "aggregate_fact_key": "ledger_aggregate_fact_v2_35de39633d91fdd6bf878161",
+ "semantic_fact_key": "ledger_semantic_fact_v2_1d46f6791fa26f9200887a0a",
+ "source_record_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024.over_gbp_2m.transactions",
+ "concept": "hmrc.sdlt.transactions",
+ "measure_id": "transactions",
+ "unit": "count",
+ "aggregation": "sum",
+ "entity": {
+ "name": "return",
+ "role": "sdlt_land_transaction"
+ },
+ "geography": {
+ "id": "hmrc:england_and_northern_ireland",
+ "level": "statistical_scope",
+ "vintage": "current"
+ },
+ "period": {
+ "type": "fiscal_year",
+ "value": 2024
+ },
+ "period_coverage": {
+ "start_date": "2024-04-01",
+ "end_date": "2025-03-31",
+ "basis": "fiscal"
+ },
+ "layout": {
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "groupby_dimension": "sdlt_price_band",
+ "groupby_value_id": "over_gbp_2m",
+ "table_record_kind": "detail"
+ },
+ "dimensions": {
+ "sdlt_buyer_type": "other_buyers",
+ "sdlt_price_band": "over_gbp_2m",
+ "sdlt_property_type": "residential"
+ },
+ "source": {
+ "source_name": "hmrc",
+ "source_table": "UK Stamp Tax Statistics 2024 to 2025, corrected tables (11 March 2026): Tables 6b, 8a and 8b",
+ "source_file": "Annual_Stamps_2024_25_correction.ods",
+ "source_sha256": "ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5",
+ "vintage": "annual_stamp_tax_statistics_2024_25_corrected_2026_03_11",
+ "raw_r2_key": "raw/uk/hmrc/hmrc-stamp-tax-statistics-2024-25/2025/ee39163835f66be709ac2a2fc1345c5a536712a57347bcc65ddf471f7339b7b5/Annual_Stamps_2024_25_correction.ods"
+ },
+ "value": 1000
+ }
+ ]
+}
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 63f0d9b47..25fd68b85 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.132.6"
+ "version": "2.134.4"
},
"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/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 58728f8b0..729516967 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
@@ -8532,10 +8532,10 @@
{
"fixture_value": 15406516698.785578,
"kind": "calibration_drift",
- "ledger_value": 15026137524.089184,
+ "ledger_value": 10161716337.860817,
"name": "obr.sdlt",
"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."
+ "reason": "Payer and period basis (uk-data#564, microcosm#1095): ours binds households' SDLT, the OBR March 2026 line 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) times individuals' share of HMRC's 2024-25 SDLT receipts, residential (Table 8a) and non-residential (Table 8b) together; the frozen incumbent fixture holds the FY2025-26 value of the whole line alone, which companies, partnerships and collective investment schemes pay about a third of."
},
{
"fixture_value": 3194800881.520547,
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 2962b34b8..87b768471 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
@@ -1261,6 +1261,74 @@
}
]
},
+ {
+ "resource": "hmrc_stamp_tax_facts.json",
+ "purpose": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), the 2024-25 rows the property purchases stage fits households' additional-dwelling and non-residential purchases to (uk-data#573, microcosm#1095): Table 6b transactions paying the higher rates on additional dwellings, every buyer, by price band (the HRAD transactions, value and receipts); Table 8a residential transactions, value and receipts for individuals and for other buyers (the individuals' shares that allocate HRAD to households); and Table 8b non-residential transactions, value and receipts for individuals, by price band. Every fact covers England and Northern Ireland and transactions of GBP 40,000 or above. No value is derived here.",
+ "consumers": [
+ "uk_runtime.property_purchases"
+ ],
+ "planned_consumers": [],
+ "selections": [
+ {
+ "label": "table6b_fy2024_hrad",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024"
+ },
+ "expected_row_count": 44
+ },
+ {
+ "label": "table8a_fy2024_residential_individuals",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024"
+ },
+ "expected_row_count": 21
+ },
+ {
+ "label": "table8a_fy2024_residential_other_buyers",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024"
+ },
+ "expected_row_count": 24
+ },
+ {
+ "label": "table8b_fy2024_non_residential_individuals",
+ "selector": {
+ "source_name": "hmrc",
+ "record_set_id": "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+ },
+ "expected_row_count": 21
+ }
+ ]
+ },
+ {
+ "resource": "dwp_move_to_uc_facts.json",
+ "purpose": "DWP Stat-Xplore, households sent a Move to Universal Credit migration notice in Great Britain, notices July 2022 to June 2026, by the legacy benefits they received and their move status (claimed Universal Credit, did not claim as the legacy benefit closed, in progress), with the totals by combination and by status (uk-data#534, microcosm#1095): the uc_legacy_closure_take_up stage's claim rate for a combination is claimed / (claimed + did not claim). No value is derived here.",
+ "consumers": [
+ "uk_runtime.legacy_closure_take_up"
+ ],
+ "planned_consumers": [],
+ "selections": [
+ {
+ "label": "mtuc_households_by_legacy_benefit_and_move_status",
+ "selector": {
+ "source_name": "dwp",
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06"
+ },
+ "expected_row_count": 57
+ },
+ {
+ "label": "mtuc_households_totals",
+ "selector": {
+ "source_name": "dwp",
+ "record_set_id": "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total"
+ },
+ "expected_row_count": 23
+ }
+ ]
+ },
{
"resource": "obr_hvcts_costing_facts.json",
"purpose": "OBR costing of the high value council tax surcharge (2 April 2026): Table 1.1 and 1.2 properties in scope by band for 2028-29 to 2030-31 (static and post-behaviour) and the paragraph 1.13 non-owner-occupied share. Consumed by the uk_high_value_homes_benchmarks diagnostic gate and the high-value home stock builder's owner-occupied control (microcosm#1240).",
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 20bea56bb..2dcc5bd1f 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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"source_vintages": {
"conditioning_resource": "hmrc_cgt_conditioning_facts.json",
"conditioning_resource_sha256": "054b1ee1a66cae6ed3793053eb0d3b9eea6b3f8976953479948ae11f7eedcd35",
@@ -743,7 +743,7 @@
"full_frs_tei_band_unavailable"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"source_vintages": {
"hmrc_surface": "2023-24",
"mapped_build_period": "2024",
@@ -785,7 +785,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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -811,7 +811,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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -831,7 +831,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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -854,7 +854,7 @@
"property_finance_costs"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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)"
@@ -862,6 +862,50 @@
"stage": "property_components",
"status": "required_at_build"
},
+ "property_purchases": {
+ "base_candidate_sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833",
+ "base_candidate_tier": "frs",
+ "effective_mass_requirements": {},
+ "mass_change_semantics": "mass_conserving",
+ "output_weight_kind": "importance",
+ "outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "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": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
+ "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"
+ },
+ "stage": "property_purchases",
+ "status": "required_at_build"
+ },
+ "regional_home_values": {
+ "base_candidate_sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833",
+ "base_candidate_tier": "frs",
+ "effective_mass_requirements": {},
+ "mass_change_semantics": "mass_conserving",
+ "output_weight_kind": "importance",
+ "outputs": [
+ "main_residence_value_rank_basis"
+ ],
+ "required_mass_change_reason": "Regional home values assigned on the source spine: household weights pass through unchanged and total household mass is conserved.",
+ "rewrites": [
+ "main_residence_value",
+ "property_wealth"
+ ],
+ "source_manifest": "source_stages.json",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
+ "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)"
+ },
+ "stage": "regional_home_values",
+ "status": "required_at_build"
+ },
"regional_property_uprating": {
"base_candidate_sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833",
"base_candidate_tier": "frs",
@@ -878,7 +922,7 @@
"non_residential_property_value"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -905,7 +949,7 @@
"employment_income"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -938,7 +982,7 @@
"household_source_id"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -960,7 +1004,7 @@
"student_loan_plan"
],
"source_manifest": "source_stages.json",
- "source_manifest_sha256": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -982,7 +1026,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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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"
@@ -1017,7 +1061,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": "7bfd67bbf92d80eff3bb195520b8f647822730b88734ced8c7a5e02fce2ae616",
+ "source_manifest_sha256": "929a688b052bd3d35951fe3315a141ae5c8e004cd8e22840eae470367d3ed88d",
"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 4ad80c4b4..91dfc6bfa 100644
--- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json
+++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json
@@ -1100,7 +1100,7 @@
"nonnegative_outputs": [
"maximum_extended_childcare_hours_usage"
],
- "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.132.6'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)."
+ "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.134.4'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)."
},
{
"stage": "frs_person_draws",
@@ -3086,6 +3086,70 @@
"rewrites": [],
"notes": "Spine-only, deterministic, mass-conserving support split for the dense graph's post-geography home value map (microcosm#1240). The value node reads every owner clone's home value off its assigned constituency's Land Registry sale distribution at the household's weighted rank among its region's owners, so each seat's homes over 2 million rest on the few households whose rank is in the top of the region; this stage copies every owner household in the top five per cent of its region six ways at equal weight, each copy carrying its index in high_value_support_copy_index (0 on roots), the explicit lineage the geography identity keys on, and the value node gives each copy its own keyed rank inside the stratum. No value is assigned and no draw is made here."
},
+ {
+ "stage": "regional_home_values",
+ "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)",
+ "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations",
+ "grain": "household",
+ "artifacts": [
+ {
+ "role": "value_knots",
+ "kind": "public_aggregate_reference",
+ "resource": "high_value_home_value_knots.json",
+ "format": "json",
+ "runtime_sha256_required": true
+ }
+ ],
+ "operations": [
+ {
+ "kind": "assign_regional_home_values",
+ "knots": "high_value_home_value_knots.json",
+ "knots_level": "region",
+ "region_map": {
+ "EAST_MIDLANDS": "E12000004",
+ "EAST_OF_ENGLAND": "E12000006",
+ "LONDON": "E12000007",
+ "NORTH_EAST": "E12000001",
+ "NORTH_WEST": "E12000002",
+ "SOUTH_EAST": "E12000008",
+ "SOUTH_WEST": "E12000009",
+ "WALES": "W92000004",
+ "WEST_MIDLANDS": "E12000005",
+ "YORKSHIRE": "E12000003"
+ },
+ "rows": "owner households (tenure owned outright or with a mortgage) with main_residence_value > 0 in the mapped regions",
+ "rank": "weighted mid-rank of main_residence_value among the owner households of the FRS region at the spine's weights, ties broken by a keyed draw; high-value support copies take support_stratum_lower + (1 - support_stratum_lower) * draw",
+ "support_stratum_lower": 0.95,
+ "stream": [
+ "sha256-u53-v1",
+ "uk-spine-regional-home-values-v1",
+ 0,
+ 0
+ ],
+ "value": "np.interp(rank, grid, region knots)",
+ "property_wealth": "moves by the value's change, floored at 0",
+ "rank_basis_column": "main_residence_value_rank_basis"
+ },
+ {
+ "kind": "record_mass_conservation_receipt",
+ "entity": "household",
+ "reason": "Regional home values assigned on the source spine: household weights pass through unchanged and total household mass is conserved.",
+ "declared_factor": 1.0,
+ "gate_coupling": "The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason."
+ }
+ ],
+ "outputs": [
+ "main_residence_value_rank_basis"
+ ],
+ "rewrites": [
+ "main_residence_value",
+ "property_wealth"
+ ],
+ "nonnegative_outputs": [
+ "main_residence_value_rank_basis"
+ ],
+ "notes": "The national line's home values (microcosm#1112, microcosm#1095). The national release solves the bound spine, which has no area, so main_residence_value stayed the WAS-imputed value after the regional uprating, not a Land Registry value; the dense line reads values off the assigned constituency's distribution only after areas exist (uk.full.property.value, microcosm#1240). This stage gives every England-and-Wales owner household with a value the one its region's uprated Land Registry distribution holds at the household's weighted mid-rank among the owner households of its FRS region, at the spine's weights, ranked as the dense node ranks (ties broken by a keyed draw; the high-value support copies spread over the top stratum by their own draws), and moves property_wealth by the change. Scotland, Northern Ireland, renters and owners without a value keep theirs, and the council-tax band is untouched. The replaced value is kept in main_residence_value_rank_basis, which the dense node ranks on, so the dense line's values, wealth and bands do not change; the release boundary drops it on both lines. The value reaches three national rows: obr.sdlt through the main-home purchase value, and ons.land.land_value and ons.land.household_land_value through property_wealth and the engine's land intensity; corporate land value does not move. The region knots run up to each region's largest sale and down to its smallest, as the dense line's constituency knots do, so the national line places more homes in the top surcharge bands than the derived stock facts; the tails are to be fixed on both lines together (#1112, María's ruling of 2026-10-17)."
+ },
{
"stage": "property_components",
"survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)",
@@ -3215,6 +3279,103 @@
],
"notes": "Fills the two landlord inputs policyengine-uk 2.123.0 adds beside property_income (microcosm#1106; PolicyEngine/policyengine-uk#2172). FRS landlords report ROYYR1 after show card K6, which nets mortgage payments and loan interest, so their profit sits below the SPI concept; the stage draws their restricted finance costs from the SPI 2022-23 tape at build-period prices (incidence by band of profit after finance costs, amount from the regime-gated QRF on the analog landlords with costs, both keyed on person_id) and adds them back to property_income, so the engine relieves the interest once as a tax reduction (decision 6, to be confirmed with Max before merge). The SPI channel keeps the costs the income stage drew. Receipts for every landlord come from PRIS 2024-25: ranked by profit, walked into Table 13's bands at their shares of the individuals-basis landlords times the spine's landlord weight, linear within a band, never below profit, the open top band proportional to profit with the multiplier solved to the individuals' receipts per landlord, or held at 1 with the overshoot recorded where the floor at profit already exceeds them; receipts less profit are the deductible expenses (PRIS allowable expenses other than residential finance costs). Sub-letting rent keeps equal receipts and no expenses until Rent a Room is released. Household weights are unchanged; the receipt records the tape incidence and its realisation, the band fit, the totals against PRIS, the channel split, the residuals and the share of landlords whose household holds rental property."
},
+ {
+ "stage": "property_purchases",
+ "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b",
+ "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics",
+ "grain": "household",
+ "artifacts": [
+ {
+ "role": "stamp_tax_facts",
+ "kind": "public_aggregate_reference",
+ "resource": "hmrc_stamp_tax_facts.json",
+ "format": "json",
+ "runtime_sha256_required": true
+ }
+ ],
+ "operations": [
+ {
+ "kind": "verify_vendored_fact_resource",
+ "artifact_role": "stamp_tax_facts",
+ "resource": "hmrc_stamp_tax_facts.json",
+ "feed_pin": "chronicle_feed.json",
+ "record_sets": [
+ "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+ ],
+ "source_vintage": "2024-25",
+ "mapped_build_period": 2024,
+ "period_mapping": "published_tax_year_equals_build_period",
+ "require_before_source_read": true,
+ "runtime_sha256_required": true,
+ "fail_on_mismatch": true
+ },
+ {
+ "kind": "impute_annual_property_purchases",
+ "outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "stocks": [
+ "other_residential_property_value",
+ "non_residential_property_value"
+ ],
+ "port_of": "uk-data#573 at 07f6b460f",
+ "minimum_price": 40000.0,
+ "eligibility": "stock at least minimum_price, the chargeable consideration HMRC's Stamp Tax tables cover, and positive weight; at most one purchase of each kind a year",
+ "fit_regions": [
+ "NORTH_EAST",
+ "NORTH_WEST",
+ "YORKSHIRE",
+ "EAST_MIDLANDS",
+ "WEST_MIDLANDS",
+ "EAST_OF_ENGLAND",
+ "LONDON",
+ "SOUTH_EAST",
+ "SOUTH_WEST",
+ "NORTHERN_IRELAND"
+ ],
+ "hazard": "(max(stock, minimum) / weighted mean eligible stock) ** 1",
+ "event_score": "-log1p(-u) / hazard",
+ "threshold": "the score threshold whose weighted count of purchasers in the fit regions is closest to the transactions target, applied everywhere",
+ "price": "min(stock, max(minimum, scale * band mean)), band drawn at the band shares, scale bisected to the value target; where the purchasers' stock cannot carry the value, every purchaser buys at its stock and the shortfall is recorded",
+ "minimum_value_share": 0.8,
+ "weights": "spine_design_weights",
+ "streams": {
+ "additional_residential_property_purchased": {
+ "event_salt": "additional_residential_property_purchased",
+ "price_salt": "additional_residential_property_purchased_price",
+ "seed": 0
+ },
+ "non_residential_property_purchased": {
+ "event_salt": "non_residential_property_purchased",
+ "price_salt": "non_residential_property_purchased_price",
+ "seed": 0
+ }
+ },
+ "additional_residential_targets": "Table 6b HRAD transactions and value, 2024-25, times individuals' shares of Table 8a residential transactions and value; Table 6b bands with the five above GBP 2m combined",
+ "non_residential_targets": "Table 8b individuals' transactions, value and bands, 2024-25"
+ },
+ {
+ "kind": "record_mass_conservation_receipt",
+ "entity": "household",
+ "reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.",
+ "declared_factor": 1.0,
+ "gate_coupling": "The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason."
+ }
+ ],
+ "outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "nonnegative_outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "notes": "Ports uk-data#573 (a draft, at 07f6b460f; uk-data#556) at the spine's design weights, after the regional uprating and the high-value support copies, so every copy draws on its own (microcosm#1095). policyengine-uk 2.134.1 (pe-uk#2241) makes both purchases inputs that default to nil, so without them a purchasing household pays SDLT on its main home only. A household whose stock of a kind is at least HMRC's GBP 40,000 coverage floor, at positive weight, can buy once a year. The purchase hazard is proportional to the stock over the weighted mean eligible stock in England and Northern Ireland, where SDLT applies; each household's exponential event score reads its own identity-keyed uniform, and the threshold whose weighted count of England-and-Northern-Ireland purchasers is closest to HMRC's transactions applies everywhere, Scotland and Wales included, which have no target here. Prices are band means drawn at HMRC's band shares on a second identity-keyed stream, times one scale bisected so the weighted England-and-Northern-Ireland value equals HMRC's, never below GBP 40,000 and never above the stock. Where the purchasers' stock cannot carry HMRC's value, as for non-residential property on the national spine, every purchaser buys at its stock and the receipt records the shortfall, and the stage refuses below 80% of the value; uk-data#573 refuses any shortfall (María's ruling of 2026-10-16). Targets, vendored from the pinned Chronicle feed: additional dwellings are Table 6b's 2024-25 HRAD transactions and value (every buyer) times individuals' shares of Table 8a's residential transactions and value, with Table 6b's bands and the five above GBP 2m combined; non-residential purchases are Table 8b's 2024-25 individuals. The stage fits transactions and value only; households' SDLT is fitted through obr.sdlt. The HRAD allocation is an assumption, as uk-data#573 says (its household lower bounds are 87,200 transactions and GBP 33.28bn), and probably overstates households' purchases. The draws differ from uk-data's, which read positional seeded streams; the method is the same."
+ },
{
"stage": "nts_bus_travel",
"survey": "National Travel Survey 2002-2024",
@@ -5150,7 +5311,65 @@
"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.132.6 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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."
+ "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.134.4 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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."
+ },
+ {
+ "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",
+ "grain": "benunit",
+ "artifacts": [
+ {
+ "role": "move_to_uc_facts",
+ "kind": "public_aggregate_reference",
+ "resource": "dwp_move_to_uc_facts.json",
+ "format": "json",
+ "runtime_sha256_required": true
+ }
+ ],
+ "operations": [
+ {
+ "kind": "verify_vendored_fact_resource",
+ "artifact_role": "move_to_uc_facts",
+ "resource": "dwp_move_to_uc_facts.json",
+ "feed_pin": "chronicle_feed.json",
+ "record_sets": [
+ "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total"
+ ],
+ "source_vintage": "July 2022 to June 2026",
+ "mapped_build_period": 2024,
+ "period_mapping": "cumulative_claim_rates_applied_at_every_closure",
+ "require_before_source_read": true,
+ "runtime_sha256_required": true,
+ "fail_on_mismatch": true
+ },
+ {
+ "kind": "draw_uc_claim_at_legacy_closure",
+ "output": "would_claim_uc_at_legacy_closure",
+ "port_of": "uk-data#534 at c67077a66",
+ "legacy_benefits": [
+ "child_tax_credit",
+ "working_tax_credit",
+ "housing_benefit",
+ "esa_income",
+ "income_support",
+ "jsa_income"
+ ],
+ "true_without_draw": "a member reports universal_credit_reported, would_claim_uc is true, or no member reports a legacy benefit",
+ "rate": "claimed / (claimed + did not claim) for the combination, the all-households rate where DWP reports none",
+ "probability": "clip((rate - p) / (1 - p), 0, 1)",
+ "p": "the combination's weighted share of Great Britain's drawn units with would_claim_uc true, at the spine's design weights; the probability applies in Northern Ireland too",
+ "stream": {
+ "salt": "would_claim_uc_at_legacy_closure",
+ "seed": 0
+ }
+ }
+ ],
+ "outputs": [
+ "would_claim_uc_at_legacy_closure"
+ ],
+ "notes": "Ports uk-data#534 (a draft, at c67077a66; uk-data#492) at the spine's design weights (microcosm#1095). policyengine-uk 2.128.0 (pe-uk#2119) moves a family off a legacy benefit DWP has closed (tax credits from 2025-26) and takes its other legacy awards away; the family then claims Universal Credit if would_claim_uc or would_claim_uc_at_legacy_closure is true, and the engine's default for the second, true, put every such family on Universal Credit. The stage runs after uc_capital_coherence, the last writer of would_claim_uc and universal_credit_reported, and before pension_credit_take_up and CGT cloning, so every SPI benefit unit draws on its own final receipts and every clone carries its source's draw. A benefit unit with a member reporting Universal Credit, a unit whose would_claim_uc is true, and a unit reporting none of the six legacy means-tested benefits (child_tax_credit, working_tax_credit, housing_benefit, esa_income, income_support and jsa_income, each read as a member's _reported above 0) is true, the engine's default. Every other unit is drawn at (r - p) / (1 - p), clipped to [0, 1], where r is DWP's claimed / (claimed + did not claim) for the unit's combination of legacy benefits (the all-households rate where DWP reports none; households still in progress are left out) and p is the combination's share of Great Britain's such units whose would_claim_uc is true, at the stage's household weights mapped to benefit units (uk-data#534's p is unweighted, as its draw precedes calibration; María's rulings of 2026-10-16 and 2026-10-17); the probability applies to the combination's units in Northern Ireland too, since DWP's rates cover Great Britain. So, in expectation, the weighted share of Great Britain's drawn units claiming at the closure in each combination is DWP's rate wherever p is at most r; where p exceeds it the probability is 0 and the receipt flags the combination (rate_unreachable), never p itself. Two limits carry over from uk-data#534. The drawn cohort includes units on the Pension Credit route, whose legacy benefits policyengine-uk does not close, and DWP's rates count every household sent a notice, entitled to Universal Credit or not. The uniform reads an identity-keyed stream on benunit_id."
},
{
"stage": "pension_credit_take_up",
@@ -5814,7 +6033,7 @@
{
"role": "policy_parameters",
"kind": "versioned_parameter_tree",
- "dependency": "policyengine-uk>=2.132.6 via microcosm-build[uk]",
+ "dependency": "policyengine-uk>=2.134.4 via microcosm-build[uk]",
"parameters": [
"gov.hmrc.cgt.annual_exempt_amount"
],
@@ -5895,7 +6114,7 @@
{
"role": "policy_parameters",
"kind": "versioned_parameter_tree",
- "dependency": "policyengine-uk>=2.132.6 via microcosm-build[uk]",
+ "dependency": "policyengine-uk>=2.134.4 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 b2afc3b0b..9e87edbb4 100644
--- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml
+++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml
@@ -1004,7 +1004,7 @@ stages:
- maximum_extended_childcare_hours_usage
nonnegative_outputs:
- maximum_extended_childcare_hours_usage
- 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.132.6'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).
+ 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.134.4'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).
- stage: frs_person_draws
survey: Family Resources Survey 2024-25
source: Sourced UK take-up contract rates and identity-keyed deterministic draws.
@@ -2595,6 +2595,55 @@ stages:
- high_value_support_copy_index
rewrites: []
notes: 'Spine-only, deterministic, mass-conserving support split for the dense graph''s post-geography home value map (microcosm#1240). The value node reads every owner clone''s home value off its assigned constituency''s Land Registry sale distribution at the household''s weighted rank among its region''s owners, so each seat''s homes over 2 million rest on the few households whose rank is in the top of the region; this stage copies every owner household in the top five per cent of its region six ways at equal weight, each copy carrying its index in high_value_support_copy_index (0 on roots), the explicit lineage the geography identity keys on, and the value node gives each copy its own keyed rank inside the stratum. No value is assigned and no draw is made here.'
+- stage: regional_home_values
+ 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)
+ source: uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations
+ grain: household
+ artifacts:
+ - role: value_knots
+ kind: public_aggregate_reference
+ resource: high_value_home_value_knots.json
+ format: json
+ runtime_sha256_required: true
+ operations:
+ - kind: assign_regional_home_values
+ knots: high_value_home_value_knots.json
+ knots_level: region
+ region_map:
+ EAST_MIDLANDS: E12000004
+ EAST_OF_ENGLAND: E12000006
+ LONDON: E12000007
+ NORTH_EAST: E12000001
+ NORTH_WEST: E12000002
+ SOUTH_EAST: E12000008
+ SOUTH_WEST: E12000009
+ WALES: W92000004
+ WEST_MIDLANDS: E12000005
+ YORKSHIRE: E12000003
+ rows: owner households (tenure owned outright or with a mortgage) with main_residence_value > 0 in the mapped regions
+ rank: weighted mid-rank of main_residence_value among the owner households of the FRS region at the spine's weights, ties broken by a keyed draw; high-value support copies take support_stratum_lower + (1 - support_stratum_lower) * draw
+ support_stratum_lower: 0.95
+ stream:
+ - sha256-u53-v1
+ - uk-spine-regional-home-values-v1
+ - 0
+ - 0
+ value: np.interp(rank, grid, region knots)
+ property_wealth: moves by the value's change, floored at 0
+ rank_basis_column: main_residence_value_rank_basis
+ - kind: record_mass_conservation_receipt
+ entity: household
+ reason: 'Regional home values assigned on the source spine: household weights pass through unchanged and total household mass is conserved.'
+ declared_factor: 1.0
+ gate_coupling: The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason.
+ outputs:
+ - main_residence_value_rank_basis
+ rewrites:
+ - main_residence_value
+ - property_wealth
+ nonnegative_outputs:
+ - main_residence_value_rank_basis
+ notes: 'The national line''s home values (microcosm#1112, microcosm#1095). The national release solves the bound spine, which has no area, so main_residence_value stayed the WAS-imputed value after the regional uprating, not a Land Registry value; the dense line reads values off the assigned constituency''s distribution only after areas exist (uk.full.property.value, microcosm#1240). This stage gives every England-and-Wales owner household with a value the one its region''s uprated Land Registry distribution holds at the household''s weighted mid-rank among the owner households of its FRS region, at the spine''s weights, ranked as the dense node ranks (ties broken by a keyed draw; the high-value support copies spread over the top stratum by their own draws), and moves property_wealth by the change. Scotland, Northern Ireland, renters and owners without a value keep theirs, and the council-tax band is untouched. The replaced value is kept in main_residence_value_rank_basis, which the dense node ranks on, so the dense line''s values, wealth and bands do not change; the release boundary drops it on both lines. The value reaches three national rows: obr.sdlt through the main-home purchase value, and ons.land.land_value and ons.land.household_land_value through property_wealth and the engine''s land intensity; corporate land value does not move. The region knots run up to each region''s largest sale and down to its smallest, as the dense line''s constituency knots do, so the national line places more homes in the top surcharge bands than the derived stock facts; the tails are to be fixed on both lines together (#1112, María''s ruling of 2026-10-17).'
- stage: property_components
survey: Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)
source: https://www.gov.uk/government/statistics/property-rental-income-statistics
@@ -2690,6 +2739,82 @@ stages:
nonnegative_outputs:
- property_rental_income
notes: 'Fills the two landlord inputs policyengine-uk 2.123.0 adds beside property_income (microcosm#1106; PolicyEngine/policyengine-uk#2172). FRS landlords report ROYYR1 after show card K6, which nets mortgage payments and loan interest, so their profit sits below the SPI concept; the stage draws their restricted finance costs from the SPI 2022-23 tape at build-period prices (incidence by band of profit after finance costs, amount from the regime-gated QRF on the analog landlords with costs, both keyed on person_id) and adds them back to property_income, so the engine relieves the interest once as a tax reduction (decision 6, to be confirmed with Max before merge). The SPI channel keeps the costs the income stage drew. Receipts for every landlord come from PRIS 2024-25: ranked by profit, walked into Table 13''s bands at their shares of the individuals-basis landlords times the spine''s landlord weight, linear within a band, never below profit, the open top band proportional to profit with the multiplier solved to the individuals'' receipts per landlord, or held at 1 with the overshoot recorded where the floor at profit already exceeds them; receipts less profit are the deductible expenses (PRIS allowable expenses other than residential finance costs). Sub-letting rent keeps equal receipts and no expenses until Rent a Room is released. Household weights are unchanged; the receipt records the tape incidence and its realisation, the band fit, the totals against PRIS, the channel split, the residuals and the share of landlords whose household holds rental property.'
+- stage: property_purchases
+ survey: HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b
+ source: https://www.gov.uk/government/statistics/uk-stamp-tax-statistics
+ grain: household
+ artifacts:
+ - role: stamp_tax_facts
+ kind: public_aggregate_reference
+ resource: hmrc_stamp_tax_facts.json
+ format: json
+ runtime_sha256_required: true
+ operations:
+ - kind: verify_vendored_fact_resource
+ artifact_role: stamp_tax_facts
+ resource: hmrc_stamp_tax_facts.json
+ feed_pin: chronicle_feed.json
+ record_sets:
+ - hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024
+ - hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024
+ - hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024
+ - hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024
+ source_vintage: 2024-25
+ mapped_build_period: 2024
+ period_mapping: published_tax_year_equals_build_period
+ require_before_source_read: true
+ runtime_sha256_required: true
+ fail_on_mismatch: true
+ - kind: impute_annual_property_purchases
+ outputs:
+ - additional_residential_property_purchased
+ - non_residential_property_purchased
+ stocks:
+ - other_residential_property_value
+ - non_residential_property_value
+ port_of: uk-data#573 at 07f6b460f
+ minimum_price: 40000.0
+ eligibility: stock at least minimum_price, the chargeable consideration HMRC's Stamp Tax tables cover, and positive weight; at most one purchase of each kind a year
+ fit_regions:
+ - NORTH_EAST
+ - NORTH_WEST
+ - YORKSHIRE
+ - EAST_MIDLANDS
+ - WEST_MIDLANDS
+ - EAST_OF_ENGLAND
+ - LONDON
+ - SOUTH_EAST
+ - SOUTH_WEST
+ - NORTHERN_IRELAND
+ hazard: (max(stock, minimum) / weighted mean eligible stock) ** 1
+ event_score: -log1p(-u) / hazard
+ threshold: the score threshold whose weighted count of purchasers in the fit regions is closest to the transactions target, applied everywhere
+ price: min(stock, max(minimum, scale * band mean)), band drawn at the band shares, scale bisected to the value target; where the purchasers' stock cannot carry the value, every purchaser buys at its stock and the shortfall is recorded
+ minimum_value_share: 0.8
+ weights: spine_design_weights
+ streams:
+ additional_residential_property_purchased:
+ event_salt: additional_residential_property_purchased
+ price_salt: additional_residential_property_purchased_price
+ seed: 0
+ non_residential_property_purchased:
+ event_salt: non_residential_property_purchased
+ price_salt: non_residential_property_purchased_price
+ seed: 0
+ additional_residential_targets: Table 6b HRAD transactions and value, 2024-25, times individuals' shares of Table 8a residential transactions and value; Table 6b bands with the five above GBP 2m combined
+ non_residential_targets: Table 8b individuals' transactions, value and bands, 2024-25
+ - kind: record_mass_conservation_receipt
+ entity: household
+ reason: 'Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.'
+ declared_factor: 1.0
+ gate_coupling: The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason.
+ outputs:
+ - additional_residential_property_purchased
+ - non_residential_property_purchased
+ nonnegative_outputs:
+ - additional_residential_property_purchased
+ - non_residential_property_purchased
+ notes: 'Ports uk-data#573 (a draft, at 07f6b460f; uk-data#556) at the spine''s design weights, after the regional uprating and the high-value support copies, so every copy draws on its own (microcosm#1095). policyengine-uk 2.134.1 (pe-uk#2241) makes both purchases inputs that default to nil, so without them a purchasing household pays SDLT on its main home only. A household whose stock of a kind is at least HMRC''s GBP 40,000 coverage floor, at positive weight, can buy once a year. The purchase hazard is proportional to the stock over the weighted mean eligible stock in England and Northern Ireland, where SDLT applies; each household''s exponential event score reads its own identity-keyed uniform, and the threshold whose weighted count of England-and-Northern-Ireland purchasers is closest to HMRC''s transactions applies everywhere, Scotland and Wales included, which have no target here. Prices are band means drawn at HMRC''s band shares on a second identity-keyed stream, times one scale bisected so the weighted England-and-Northern-Ireland value equals HMRC''s, never below GBP 40,000 and never above the stock. Where the purchasers'' stock cannot carry HMRC''s value, as for non-residential property on the national spine, every purchaser buys at its stock and the receipt records the shortfall, and the stage refuses below 80% of the value; uk-data#573 refuses any shortfall (María''s ruling of 2026-10-16). Targets, vendored from the pinned Chronicle feed: additional dwellings are Table 6b''s 2024-25 HRAD transactions and value (every buyer) times individuals'' shares of Table 8a''s residential transactions and value, with Table 6b''s bands and the five above GBP 2m combined; non-residential purchases are Table 8b''s 2024-25 individuals. The stage fits transactions and value only; households'' SDLT is fitted through obr.sdlt. The HRAD allocation is an assumption, as uk-data#573 says (its household lower bounds are 87,200 transactions and GBP 33.28bn), and probably overstates households'' purchases. The draws differ from uk-data''s, which read positional seeded streams; the method is the same.'
- stage: nts_bus_travel
survey: National Travel Survey 2002-2024
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.
@@ -4179,7 +4304,51 @@ 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.132.6 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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.
+ 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.134.4 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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.
+- 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
+ grain: benunit
+ artifacts:
+ - role: move_to_uc_facts
+ kind: public_aggregate_reference
+ resource: dwp_move_to_uc_facts.json
+ format: json
+ runtime_sha256_required: true
+ operations:
+ - kind: verify_vendored_fact_resource
+ artifact_role: move_to_uc_facts
+ resource: dwp_move_to_uc_facts.json
+ feed_pin: chronicle_feed.json
+ record_sets:
+ - dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06
+ - dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total
+ source_vintage: July 2022 to June 2026
+ mapped_build_period: 2024
+ period_mapping: cumulative_claim_rates_applied_at_every_closure
+ require_before_source_read: true
+ runtime_sha256_required: true
+ fail_on_mismatch: true
+ - kind: draw_uc_claim_at_legacy_closure
+ output: would_claim_uc_at_legacy_closure
+ port_of: uk-data#534 at c67077a66
+ legacy_benefits:
+ - child_tax_credit
+ - working_tax_credit
+ - housing_benefit
+ - esa_income
+ - income_support
+ - jsa_income
+ true_without_draw: a member reports universal_credit_reported, would_claim_uc is true, or no member reports a legacy benefit
+ rate: claimed / (claimed + did not claim) for the combination, the all-households rate where DWP reports none
+ probability: clip((rate - p) / (1 - p), 0, 1)
+ p: the combination's weighted share of Great Britain's drawn units with would_claim_uc true, at the spine's design weights; the probability applies in Northern Ireland too
+ stream:
+ salt: would_claim_uc_at_legacy_closure
+ seed: 0
+ outputs:
+ - would_claim_uc_at_legacy_closure
+ notes: Ports uk-data#534 (a draft, at c67077a66; uk-data#492) at the spine's design weights (microcosm#1095). policyengine-uk 2.128.0 (pe-uk#2119) moves a family off a legacy benefit DWP has closed (tax credits from 2025-26) and takes its other legacy awards away; the family then claims Universal Credit if would_claim_uc or would_claim_uc_at_legacy_closure is true, and the engine's default for the second, true, put every such family on Universal Credit. The stage runs after uc_capital_coherence, the last writer of would_claim_uc and universal_credit_reported, and before pension_credit_take_up and CGT cloning, so every SPI benefit unit draws on its own final receipts and every clone carries its source's draw. A benefit unit with a member reporting Universal Credit, a unit whose would_claim_uc is true, and a unit reporting none of the six legacy means-tested benefits (child_tax_credit, working_tax_credit, housing_benefit, esa_income, income_support and jsa_income, each read as a member's _reported above 0) is true, the engine's default. Every other unit is drawn at (r - p) / (1 - p), clipped to [0, 1], where r is DWP's claimed / (claimed + did not claim) for the unit's combination of legacy benefits (the all-households rate where DWP reports none; households still in progress are left out) and p is the combination's share of Great Britain's such units whose would_claim_uc is true, at the stage's household weights mapped to benefit units (uk-data#534's p is unweighted, as its draw precedes calibration; María's rulings of 2026-10-16 and 2026-10-17); the probability applies to the combination's units in Northern Ireland too, since DWP's rates cover Great Britain. So, in expectation, the weighted share of Great Britain's drawn units claiming at the closure in each combination is DWP's rate wherever p is at most r; where p exceeds it the probability is 0 and the receipt flags the combination (rate_unreachable), never p itself. Two limits carry over from uk-data#534. The drawn cohort includes units on the Pension Credit route, whose legacy benefits policyengine-uk does not close, and DWP's rates count every household sent a notice, entitled to Universal Credit or not. The uniform reads an identity-keyed stream on benunit_id.
- stage: pension_credit_take_up
survey: Family Resources Survey 2024-25
source: 'DWP Income-related benefits: estimates of take-up, financial year ending 2024 (Pension Credit caseload take-up by component), applied to PolicyEngine-UK pre-take-up Pension Credit entitlement after the SPI income chain.'
@@ -4701,7 +4870,7 @@ stages:
artifacts:
- role: policy_parameters
kind: versioned_parameter_tree
- dependency: policyengine-uk>=2.132.6 via microcosm-build[uk]
+ dependency: policyengine-uk>=2.134.4 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
@@ -4766,7 +4935,7 @@ stages:
artifacts:
- role: policy_parameters
kind: versioned_parameter_tree
- dependency: policyengine-uk>=2.132.6 via microcosm-build[uk]
+ dependency: policyengine-uk>=2.134.4 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/target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json
index 2b7b4d2c8..8e0dac232 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
@@ -10892,7 +10892,7 @@
"matched_fact_count_overall": 7,
"matched_fact_count_at_or_before_period": 2,
"resolved_period": 2025,
- "resolved_value": 15026137524.089184,
+ "resolved_value": 10161716337.860817,
"resolved_fact_period": "2025",
"resolved_fact_key": "ledger_aggregate_fact_v2_1b6d55fc4ccd78bd0ae457e9"
}
@@ -30202,7 +30202,7 @@
"family": "high_value_homes",
"status": "active_england_and_wales_region_tier_local_line_only",
"active_reference_count": 28,
- "signed_rationale": "The three high-value homes region targets (owner-occupied homes over \u00a31m, \u00a31.5m and \u00a32m at April-2026 prices) fan out over the England-and-Wales part of the region tier, the nine English regions and Wales (area_scope: Price Paid covers neither Scotland nor Northern Ireland), and select the Microcosm-derived stock the constituency and local-authority cells bind, merged beside the feed from uk/high_value_home_stock_facts.json (microcosm#1240). Each row is the cross-grain control for its area cells. They bind on the local line only (calibration_lines): the national line and the release-cut certifier drop them after the compile, since the national spine's main_residence_value is the WAS donor's, not a Land Registry placement (microcosm#1301)."
+ "signed_rationale": "The three high-value homes region targets (owner-occupied homes over \u00a31m, \u00a31.5m and \u00a32m at April-2026 prices) fan out over the England-and-Wales part of the region tier, the nine English regions and Wales (area_scope: Price Paid covers neither Scotland nor Northern Ireland), and select the Microcosm-derived stock the constituency and local-authority cells bind, merged beside the feed from uk/high_value_home_stock_facts.json (microcosm#1240). Each row is the cross-grain control for its area cells. They bind on the local line only (calibration_lines): the national line and the release-cut certifier drop them after the compile (microcosm#1301). Since microcosm#1095 the national spine reads main_residence_value off the regions' Land Registry knots too, but binding the rows there would move the national registry and solve while the knots' tails still place more homes in the top bands than the derived stock (microcosm#1112)."
},
{
"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 3cda537f2..ff390bbb5 100644
--- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json
+++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json
@@ -960,6 +960,7 @@
"latest_plateau",
"count_x_mean",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
"linear_combination",
"monthly_window_average",
"monthly_window_count_x_mean",
@@ -1113,7 +1114,36 @@
"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": "hmrc",
+ "source_record_id": [
+ "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.all_price_bands.receipts",
+ "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.all_price_bands.receipts"
+ ],
+ "period_type": "fiscal_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ "label": "individuals' SDLT receipts, Tables 8a and 8b, 2024-25"
+ },
+ {
+ "role": "denominator",
+ "source_name": "hmrc",
+ "source_record_id": [
+ "hmrc.stamp_taxes_2024_25.table_8a.all_buyers.fy2024.all_price_bands.receipts",
+ "hmrc.stamp_taxes_2024_25.table_8b.all_buyers.fy2024.all_price_bands.receipts"
+ ],
+ "period_type": "fiscal_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ "label": "all buyers' SDLT receipts, Tables 8a and 8b, 2024-25"
+ }
+ ]
},
{
"name": "obr.attendance_allowance",
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 0cd808eb4..d990b88b2 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
@@ -13,6 +13,7 @@
"linear_combination",
"scaled_by_ratio",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
"rolled_forward_by_ratio"
],
"resolution_defaults": {
@@ -2177,7 +2178,7 @@
"policyengine": {
"metric_name": "obr/sdlt",
"value_variable": "stamp_duty_land_tax",
- "notes": "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": "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)."
},
"axiom": {
"metric_name": "obr/sdlt",
@@ -2193,7 +2194,36 @@
},
"category_id": "obr.efo_receipts",
"label": "Stamp Duty Land Tax",
- "value_operation": "calendar_year_window"
+ "value_operation": "calendar_year_window_scaled_by_ratio",
+ "value_operands": [
+ {
+ "role": "base"
+ },
+ {
+ "role": "numerator",
+ "source_name": "hmrc",
+ "source_record_id": [
+ "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024.all_price_bands.receipts",
+ "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024.all_price_bands.receipts"
+ ],
+ "period_type": "fiscal_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ "label": "individuals' SDLT receipts, Tables 8a and 8b, 2024-25"
+ },
+ {
+ "role": "denominator",
+ "source_name": "hmrc",
+ "source_record_id": [
+ "hmrc.stamp_taxes_2024_25.table_8a.all_buyers.fy2024.all_price_bands.receipts",
+ "hmrc.stamp_taxes_2024_25.table_8b.all_buyers.fy2024.all_price_bands.receipts"
+ ],
+ "period_type": "fiscal_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ "label": "all buyers' SDLT receipts, Tables 8a and 8b, 2024-25"
+ }
+ ]
},
{
"target_id": "obr.attendance_allowance",
@@ -28245,7 +28275,7 @@
"policyengine": {
"metric_name": "high_value_homes_by_region/over_1m",
"value_variable": "owner_occupied_home_over_gbp_1m",
- "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_1m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines): on the national spine main_residence_value is the WAS donor's, not a Land Registry placement."
+ "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_1m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines). Since microcosm#1095 the national spine reads main_residence_value off the regions' Land Registry knots too, but binding these rows there would move the national registry and solve while the knots' tails still place more homes in the top bands than the derived stock; that is left to microcosm#1112's follow-up."
},
"axiom": {
"metric_name": "high_value_homes_by_region/over_1m",
@@ -28309,7 +28339,7 @@
"policyengine": {
"metric_name": "high_value_homes_by_region/over_1_5m",
"value_variable": "owner_occupied_home_over_gbp_1_5m",
- "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_1_5m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines): on the national spine main_residence_value is the WAS donor's, not a Land Registry placement."
+ "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_1_5m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines). Since microcosm#1095 the national spine reads main_residence_value off the regions' Land Registry knots too, but binding these rows there would move the national registry and solve while the knots' tails still place more homes in the top bands than the derived stock; that is left to microcosm#1112's follow-up."
},
"axiom": {
"metric_name": "high_value_homes_by_region/over_1_5m",
@@ -28373,7 +28403,7 @@
"policyengine": {
"metric_name": "high_value_homes_by_region/over_2m",
"value_variable": "owner_occupied_home_over_gbp_2m",
- "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_2m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines): on the national spine main_residence_value is the WAS donor's, not a Land Registry placement."
+ "notes": "One reference per area of the England-and-Wales region tier (microcosm#1301): the nine English regions at the derived resource's region level and Wales at country level (area_scope), each scoped on the frame by the household-region predicate the generator stamps into its reference metadata. owner_occupied_home_over_gbp_2m is a per-household indicator the measure resolver computes from the stored main_residence_value and tenure_type through high_value_home_mask, the predicate the local cells and the release gates share, at the frame-basis threshold; it never reads an engine-uprated value. Bound on the local line only (calibration_lines). Since microcosm#1095 the national spine reads main_residence_value off the regions' Land Registry knots too, but binding these rows there would move the national registry and solve while the knots' tails still place more homes in the top bands than the derived stock; that is left to microcosm#1112's follow-up."
},
"axiom": {
"metric_name": "high_value_homes_by_region/over_2m",
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 8ad3c885f..05b374d02 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
@@ -341,6 +341,29 @@ def load_bound_spine_sidecar(path: Path, frame: Frame) -> dict[str, object]:
return sidecar
+def _assert_spine_engine_is_pinned(sidecar: Mapping[str, object]) -> None:
+ """Refuse a spine built on a policyengine-uk other than the pinned one.
+
+ The engine freeze holds the build's own engine (microcosm#1095); this
+ holds the spine it binds. A sidecar that records no engine version, or
+ "unavailable" as a synthetic one does, is left to the preflight's stage
+ roster, which already refuses a spine built before the freeze.
+ """
+
+ from microcosm.build.uk_runtime.hmrc_uprating import pinned_engine_version
+
+ recorded = sidecar.get("rules_engine")
+ version = recorded.get("version") if isinstance(recorded, Mapping) else None
+ if version in (None, "", "unavailable"):
+ return
+ pinned = pinned_engine_version()
+ if str(version) != pinned:
+ raise ValueError(
+ f"Spine checkpoint was built on policyengine-uk {version}, but the UK "
+ f"build is pinned to {pinned}: rebuild the spine on the pinned engine."
+ )
+
+
def load_bound_spine_checkpoint(
path: Path,
frame: Frame,
@@ -367,6 +390,7 @@ def load_bound_spine_checkpoint(
if not isinstance(sidecar, dict):
raise ValueError(f"input H5 build sidecar must be a JSON object: {path}")
_assert_spine_sidecar_binds_frame(sidecar, frame)
+ _assert_spine_engine_is_pinned(sidecar)
recorded = sidecar.get("output")
if (
input_sha256 is not None
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 bc0bd09fe..ab5f4ba6e 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
@@ -49,7 +49,7 @@
}
UK_TAKE_UP_DECLARED_SEEDS = {output: 0 for output in FRS_TAKE_UP_OUTPUT_COLUMNS}
# Universal Credit is claimable only by a benefit unit whose claimant or
-# partner meets its age conditions: policyengine-uk 2.132.6's ``is_uc_eligible``
+# partner meets its age conditions: policyengine-uk 2.134.4'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
@@ -64,8 +64,9 @@
# under the UC Regs 2013 reg 8 exceptions, whom the engine includes; mixed-age
# couples on the Pension Credit route, whom it excludes; and, from 2.128.0, a
# pension-age family moved onto Universal Credit when its legacy benefit
-# closes, whom it includes (SI 2014/1230 reg 60A; the build leaves
-# ``would_claim_uc_at_legacy_closure`` at the engine default). The stage
+# closes, whom it includes (SI 2014/1230 reg 60A; whether such a family
+# claims is ``would_claim_uc_at_legacy_closure``, which
+# ``uc_legacy_closure_take_up`` draws, microcosm#1095). The stage
# manifest declares the same population on the ``would_claim_uc`` operation;
# ``assert_take_up_stage_population_declaration`` refuses a manifest that stops
# saying so, so the declaration and the code cannot drift apart.
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py
index c7868b054..f62470907 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py
@@ -1027,6 +1027,7 @@ def prepare_full_build(
) -> PreparedUKFullBuild:
from .calibration_run import load_bound_spine_checkpoint
from .graph import uk_spine_endpoint
+ from .hmrc_uprating import assert_installed_engine_is_pinned
from .spine_build import (
_rules_engine,
_rules_engine_provenance,
@@ -1034,6 +1035,8 @@ def prepare_full_build(
prepare_uk_spine_execution,
)
+ # The engine freeze, before any input is read (microcosm#1095).
+ assert_installed_engine_is_pinned()
posture = posture_of(args)
release = load_uk_frs_release()
pins = {"ladder": _pin(args.ladder, args.ladder_sha256)}
@@ -2561,8 +2564,11 @@ def prepare_national_build(
args: argparse.Namespace, *, telemetry=None, attempt: dict | None = None
) -> PreparedUKNationalBuild:
"""Bind the national request to its graph: the checkpoint, the doctrine, the register."""
+ from .hmrc_uprating import assert_installed_engine_is_pinned
from .spine_build import _rules_engine, _rules_engine_provenance
+ # The engine freeze, before the input H5 is read (microcosm#1095).
+ assert_installed_engine_is_pinned()
posture = posture_of(args)
national_role.require_bound_input(args)
release = load_uk_frs_release()
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py
index 9b4852200..bb801e7fb 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py
@@ -278,6 +278,30 @@
("household", "non_residential_property_value"),
}
),
+ # Engine-free: the owners' region, tenure, value and wealth, the support
+ # copies the ranking spreads, and the source household the receipt counts
+ # distinct support by (microcosm#1112, microcosm#1095).
+ "regional_home_values": frozenset(
+ {
+ ("household", "region"),
+ ("household", "tenure_type"),
+ ("household", "main_residence_value"),
+ ("household", "property_wealth"),
+ ("household", "household_is_high_value_support_copy"),
+ ("household", "household_source_id"),
+ }
+ ),
+ # Engine-free: each kind's stock, the region that marks where SDLT
+ # applies and the source household the receipt counts distinct support by
+ # (uk-data#573, microcosm#1095).
+ "property_purchases": frozenset(
+ {
+ ("household", "region"),
+ ("household", "other_residential_property_value"),
+ ("household", "non_residential_property_value"),
+ ("household", "household_source_id"),
+ }
+ ),
# The NTS band model materializes an engine predictor (household gross
# income) over the whole frame, an open surface like the LCFS QRF.
"nts_bus_travel": None,
@@ -384,6 +408,23 @@
("benunit", "would_claim_uc"),
}
),
+ # The Move to UC claim draw reads each unit's legacy and Universal Credit
+ # receipts and its would_claim_uc, after their last writers, and the source
+ # household its receipt counts distinct support by (uk-data#534,
+ # microcosm#1095).
+ "uc_legacy_closure_take_up": frozenset(
+ {
+ ("person", "child_tax_credit_reported"),
+ ("person", "working_tax_credit_reported"),
+ ("person", "housing_benefit_reported"),
+ ("person", "esa_income_reported"),
+ ("person", "income_support_reported"),
+ ("person", "jsa_income_reported"),
+ ("person", "universal_credit_reported"),
+ ("benunit", "would_claim_uc"),
+ ("household", "household_source_id"),
+ }
+ ),
"uc_deduction_attributes": frozenset({("household", "region")}),
# The support splits copy whole households, so their surfaces are open.
"high_value_home_support": None,
@@ -783,6 +824,24 @@ def _cells(
"person",
("property_income", "property_finance_costs", "property_rental_income"),
),
+ # The region's Land Registry values on the spine, and the value they
+ # replace for the dense node to rank on (microcosm#1112).
+ "regional_home_values": _cells(
+ "household",
+ (
+ "main_residence_value",
+ "property_wealth",
+ "main_residence_value_rank_basis",
+ ),
+ ),
+ # Annual purchases from each kind of property stock (uk-data#573).
+ "property_purchases": _cells(
+ "household",
+ (
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased",
+ ),
+ ),
"lcfs_consumption": (
*_cells(
"household",
@@ -938,6 +997,9 @@ def _cells(
_Cell("benunit", "frs_benunit_capital", "float64"),
_Cell("benunit", "would_claim_uc", "bool"),
),
+ "uc_legacy_closure_take_up": (
+ _Cell("benunit", "would_claim_uc_at_legacy_closure", "bool"),
+ ),
"pension_credit_take_up": (
_Cell("benunit", "would_claim_pc", "bool"),
_Cell("benunit", "has_mixed_age_couple_pension_credit_saving", "bool"),
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 3edaa9f1a..c295377cf 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
@@ -52,6 +52,9 @@
frs_hmrc_source,
frs_take_up,
hmrc_property_rental,
+ ledger_fact_vendoring,
+ property_localisation,
+ rowwise_geography,
spi_income,
spi_support,
uc_capital_coherence,
@@ -93,6 +96,7 @@
"nts_bus_travel": "nts_bus_travel",
"regional_property_uprating": "regional_uprating",
"property_components": "property_components",
+ "property_purchases": "property_purchases",
"lcfs_consumption": "lcfs_consumption",
"etb_vat": "etb_vat",
"etb_services": "etb_services",
@@ -104,10 +108,12 @@
"uc_reporter_redraw": "uc_reporter_redraw",
"spi_benefit_coherence": "spi_benefit_coherence",
"uc_capital_coherence": "uc_capital_coherence",
+ "uc_legacy_closure_take_up": "legacy_closure_take_up",
"pension_credit_take_up": "pension_credit_take_up",
"child_benefit_take_up": "child_benefit_take_up",
"uc_deduction_attributes": "uc_deduction_attributes",
"high_value_home_support": "high_value_home_support",
+ "regional_home_values": "regional_home_values",
"cgt_support_split": "cgt_support",
"cgt_incidence_clone": "cgt_structure",
"cgt_incidence_anchor": "cgt_structure",
@@ -136,6 +142,12 @@
# loader, the tape through the income stage's preparation and uprating,
# and the support channel's names (microcosm#1106).
"property_components": (hmrc_property_rental, spi_income, spi_support),
+ # The regional values rank as the dense node does and read its knots
+ # (microcosm#1112).
+ "regional_home_values": (property_localisation, rowwise_geography),
+ # The purchases read the vendored HMRC Stamp Tax rows through the feed-pinned
+ # reader and mark SDLT's regions from the FRS region map (microcosm#1095).
+ "property_purchases": (ledger_fact_vendoring, rowwise_geography),
"nts_bus_travel": (uk_engine_adapter, bus_use_incidence),
"lcfs_consumption": (uk_engine_adapter,),
"etb_vat": (uk_engine_adapter,),
@@ -153,6 +165,9 @@
uc_capital_coherence,
),
"uc_capital_coherence": (uc_relationships,),
+ # The Move to UC claim draw reuses the UC stage's household-to-benefit-unit
+ # weight mapping and reads the vendored DWP rows (microcosm#1095).
+ "uc_legacy_closure_take_up": (uc_capital_coherence, ledger_fact_vendoring),
# The Pension Credit redraw reuses the UC stage's household-to-benefit-unit
# weight mapping and the adapter's engine materialization.
"pension_credit_take_up": (uc_capital_coherence, uk_engine_adapter),
@@ -483,10 +498,16 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]:
from .frs_take_up import UKFRSTakeUpStageTransform
from .high_value_home_support import UKHighValueHomeSupportStageTransform
from .lcfs_consumption import UKLCFSConsumptionStageTransform
+ from .legacy_closure_take_up import UKLegacyClosureTakeUpStageTransform
from .nts_bus_travel import UKNTSBusTravelStageTransform
from .pension_credit_take_up import UKPensionCreditTakeUpStageTransform
from .private_school_attendance import UKPrivateSchoolAttendanceStageTransform
from .property_components import UKPropertyComponentsStageTransform
+ from .property_purchases import (
+ UKPropertyPurchasesStageTransform,
+ UKPropertyPurchaseTargets,
+ )
+ from .regional_home_values import UKRegionalHomeValuesStageTransform
from .regional_uprating import UKRegionalPropertyUpratingStageTransform
from .salary_sacrifice import UKSalarySacrificeStageTransform
from .spi_band_donors import UKSPIIncomeBandDonorStageTransform
@@ -555,6 +576,12 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]:
property_rental_facts = _fixture_property_rental_facts(
_fixture_input(source, inputs, "property_rental_facts")
)
+ property_purchase_targets = UKPropertyPurchaseTargets.from_payload(
+ _json_mapping(
+ _fixture_input(source, inputs, "property_purchase_targets"),
+ label="property purchase targets",
+ )
+ )
cgt_parameters = UKCGTPolicyParameters(
**dict(_mapping(descriptor.get("cgt_parameters"), label="CGT parameters"))
)
@@ -634,6 +661,13 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]:
donor_table=spi_donor,
facts=property_rental_facts,
),
+ "property_purchases": UKPropertyPurchasesStageTransform(
+ stage=stages["property_purchases"],
+ targets=property_purchase_targets,
+ ),
+ "regional_home_values": UKRegionalHomeValuesStageTransform(
+ stage=stages["regional_home_values"]
+ ),
"lcfs_consumption": UKLCFSConsumptionStageTransform(
stage=stages["lcfs_consumption"],
engine=engine,
@@ -681,6 +715,9 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]:
"uc_capital_coherence": UKUCCapitalCoherenceStageTransform(
stage=stages["uc_capital_coherence"]
),
+ "uc_legacy_closure_take_up": UKLegacyClosureTakeUpStageTransform(
+ stage=stages["uc_legacy_closure_take_up"]
+ ),
"pension_credit_take_up": UKPensionCreditTakeUpStageTransform(
stage=stages["pension_credit_take_up"], engine=engine
),
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_population.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_population.py
index 2cd5d88d0..fe28b1c37 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_population.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph_population.py
@@ -473,7 +473,12 @@ def run(self, context: KernelContext) -> KernelResult:
spine_key=keys,
region=household["region"].to_numpy(),
tenure_type=household["tenure_type"].to_numpy(),
- value=household["main_residence_value"].to_numpy(),
+ # The spine's regional values (microcosm#1112) keep the value they
+ # replaced; ranking on it keeps this node's draws unchanged.
+ value=property_localisation.main_residence_rank_basis(
+ household,
+ declared=bool(context.params.get("rank_basis_declared", False)),
+ ),
weight=weights,
stream=stream,
support_copy=support,
@@ -1125,6 +1130,15 @@ def _property_localisation_nodes(
0,
int(seed),
)
+ # The regional home values stage (microcosm#1112) keeps the value it
+ # replaced; the node must receive it to rank owners as it did before.
+ rank_basis_declared = (
+ "household",
+ property_localisation.RANK_BASIS_COLUMN,
+ ) in cells
+ rank_basis_inputs = (
+ (property_localisation.RANK_BASIS_COLUMN,) if rank_basis_declared else ()
+ )
value = Node(
id="uk.full.property.value",
kernel=UKPropertyValueKernel.ref,
@@ -1134,7 +1148,12 @@ def _property_localisation_nodes(
"household",
tuple(
sorted(
- {*lineage_inputs, *_PROPERTY_VALUE_COLUMNS, "constituency_code"}
+ {
+ *lineage_inputs,
+ *_PROPERTY_VALUE_COLUMNS,
+ *rank_basis_inputs,
+ "constituency_code",
+ }
)
),
),
@@ -1161,6 +1180,7 @@ def _property_localisation_nodes(
"stream": stream,
"support_stratum_lower": property_localisation.SUPPORT_STRATUM_LOWER,
"method": property_localisation.METHOD_VERSION,
+ "rank_basis_declared": rank_basis_declared,
},
artifact_outputs=(ArtifactOutput("quantiles", PROPERTY_QUANTILE_TYPE),),
description="Read each owner clone's home value off its constituency's uprated sale distribution at its region rank.",
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_calibration.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_calibration.py
index 210cb461c..806a9e31f 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_calibration.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_calibration.py
@@ -462,6 +462,11 @@ def _default_simulation_factory(dataset: Any) -> Any:
raise ImportError(
"HMRC target materialization requires policyengine-uk."
) from exc
+ from microcosm.build.uk_runtime.hmrc_uprating import (
+ assert_installed_engine_is_pinned,
+ )
+
+ assert_installed_engine_is_pinned()
return Microsimulation(dataset=dataset)
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 3a43ab45c..a4f33ea1d 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
@@ -32,13 +32,17 @@
from __future__ import annotations
+import base64
+import hashlib
import importlib.metadata
+import importlib.util
import json
import re
from collections.abc import Callable, Mapping
from dataclasses import replace
from functools import cache, partial
from importlib.resources import files
+from pathlib import Path
from typing import Any
from microcosm.build.ledger_targets import (
@@ -361,6 +365,122 @@ def _engine_version() -> str:
return str(engine_parameter_pins()["engine"]["version"])
+def pinned_engine_version() -> str:
+ """The policyengine-uk version the vendored engine pins were taken from."""
+
+ return _engine_version()
+
+
+_ENGINE_MODULE = "policyengine_uk"
+_ENGINE_MODULE_FILE = "policyengine_uk/__init__.py"
+
+
+def _engine_origin() -> str | None:
+ """The file ``policyengine_uk`` imports from, or None if it does not import.
+
+ A module object in ``sys.modules`` without a spec leaves nothing to check,
+ so it is refused here, not by ``find_spec``'s ``ValueError``.
+ """
+
+ try:
+ spec = importlib.util.find_spec(_ENGINE_MODULE)
+ except ValueError as exc:
+ raise RuntimeError(
+ f"{_ENGINE_MODULE} is loaded without a module spec, so the UK build "
+ "cannot check which policyengine-uk it imports."
+ ) from exc
+ return None if spec is None else spec.origin
+
+
+def _engine_distribution_file() -> tuple[str, str | None] | None:
+ """The policyengine-uk distribution's own ``__init__.py`` and its RECORD hash.
+
+ None without a distribution; the hash is None where its RECORD carries no
+ sha256 for the file.
+ """
+
+ try:
+ distribution = importlib.metadata.distribution("policyengine-uk")
+ except importlib.metadata.PackageNotFoundError:
+ return None
+ for path in distribution.files or ():
+ if path.as_posix() == _ENGINE_MODULE_FILE:
+ recorded = (
+ path.hash.value
+ if path.hash is not None and path.hash.mode == "sha256"
+ else None
+ )
+ return str(distribution.locate_file(path)), recorded
+ return str(distribution.locate_file(_ENGINE_MODULE_FILE)), None
+
+
+def _record_sha256(path: str) -> str:
+ """A file's sha256 as a wheel's RECORD writes it: urlsafe base64, unpadded."""
+
+ digest = hashlib.sha256(Path(path).read_bytes()).digest()
+ return base64.urlsafe_b64encode(digest).rstrip(b"=").decode("ascii")
+
+
+def assert_installed_engine_is_pinned() -> str:
+ """Refuse a UK build on a policyengine-uk other than the pinned one.
+
+ The release freezes its engine (María's ruling of 2026-10-16): uv.lock pins
+ it for CI, but the UK extras accept any later release, so a build checks
+ the engine it imports against the one its pins were taken from. The check
+ runs at the start of ``full_build_cli.prepare_full_build`` and
+ ``prepare_national_build``, before they read an input, again in
+ ``spine_build._rules_engine``, which gives the spine build its engine, and
+ at the start of the release-cut battery and of the certifier tool. The
+ HMRC calibration helpers' default simulation factory, which no build path
+ calls, checks too. The tools that regenerate committed surfaces (the
+ coverage manifest, the H2 fixture, the reports) do not: CI's ``--check``
+ 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.134.4.post1``,
+ ``2.134.4+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
+ differ there. An importable policyengine-uk without distribution metadata
+ is refused, since its version cannot be read. An environment without
+ policyengine-uk is left to the caller's own import.
+ """
+
+ installed = installed_engine_version()
+ pinned = _engine_version()
+ if installed not in ("absent", pinned):
+ raise RuntimeError(
+ f"policyengine-uk {installed} is installed, but the UK build is pinned "
+ f"to {pinned} ({UK_ENGINE_PINS_RESOURCE}); sync the lock, or move the "
+ f"lock and re-pin with {UK_ENGINE_PINS_TOOL} together."
+ )
+ origin = _engine_origin()
+ if origin is None:
+ return installed
+ if installed == "absent":
+ raise RuntimeError(
+ "policyengine-uk imports but carries no distribution metadata, so "
+ f"its version cannot be checked against the pinned {pinned} "
+ f"({UK_ENGINE_PINS_RESOURCE}); install it from the lock."
+ )
+ own = _engine_distribution_file()
+ if own is None or Path(origin).resolve() != Path(own[0]).resolve():
+ raise RuntimeError(
+ f"{_ENGINE_MODULE} imports from {origin}, not from the policyengine-uk "
+ f"{installed} distribution's own files "
+ f"({own[0] if own is not None else 'none found'}): a shadowing copy or "
+ "an editable install; install it from the lock."
+ )
+ if own[1] is not None and _record_sha256(origin) != own[1]:
+ raise RuntimeError(
+ f"{origin} does not match the policyengine-uk {installed} "
+ "distribution's RECORD, so its files are not the pinned release's; "
+ "reinstall it from the lock."
+ )
+ return installed
+
+
def _opening_year(spec: Any, reference: LedgerTargetReference) -> int:
period_type = str(spec.metadata.get("ledger_period_type") or "")
if period_type not in _ANNUAL_PERIOD_TYPES:
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/income_tax_rate_classes.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/income_tax_rate_classes.py
index 4aeb3b603..64eddd6b1 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/income_tax_rate_classes.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/income_tax_rate_classes.py
@@ -15,9 +15,10 @@
higher-rate income range). Where the
returned pay tapers the personal allowance, the allowance it withdraws raises
taxable income too, so that tax lands in the brackets it reaches, as
-uk-data#533 reads it. policyengine-uk puts the Scottish top-rate threshold at
-GBP 112,570 rather than the statutory GBP 125,140 (pe-uk#2130), so it files
-some advanced-rate relief as additional.
+uk-data#533 reads it. From 2.134.3 policyengine-uk starts the Scottish top
+rate at the statutory GBP 125,140 of taxable income for 2024-25 to 2026-27
+(pe-uk#2437, closing pe-uk#2130). Before that it used GBP 112,570 and filed some
+advanced-rate relief as additional.
A Gift Aid donor's bands are extended by the grossed-up gift (ITA 2007
s.414(2)(b)), as policyengine-uk's earned_income_tax extends them from 2.128.0
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 b3f16fe42..d7199bf1d 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
@@ -1810,10 +1810,11 @@ def uk_contract_target_calibration_lines(target: Mapping[str, Any]) -> frozenset
A target binds on every line unless it declares ``calibration_lines``: a
non-empty list of distinct lines from :data:`UK_CALIBRATION_LINES`. The
- high-value homes region rows declare ``["local"]``, because their measure
- reads the Land Registry placement of ``main_residence_value`` that only the
- local line's pool clones carry; on the national spine the value is the WAS
- donor's (microcosm#1301).
+ high-value homes region rows declare ``["local"]`` (microcosm#1301). Since
+ microcosm#1095 the national spine reads ``main_residence_value`` off the
+ regions' Land Registry knots too, but binding the rows there would move
+ the national registry and solve while the knots' tails still place more
+ homes in the top bands than the derived stock (microcosm#1112).
"""
declared = target.get("calibration_lines")
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
new file mode 100644
index 000000000..b765cebf0
--- /dev/null
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/legacy_closure_take_up.py
@@ -0,0 +1,470 @@
+"""Who claims Universal Credit when DWP closes their legacy benefits
+(uk-data#492, ported from uk-data#534; microcosm#1095).
+
+policyengine-uk 2.128.0 (pe-uk#2119) moves a family off a legacy benefit DWP
+has closed (tax credits from 2025-26) and takes its other legacy awards away;
+the family then claims Universal Credit if it would claim anyway
+(``would_claim_uc``) or if ``would_claim_uc_at_legacy_closure`` is true. The
+engine's default, true, put every such family on Universal Credit.
+
+This stage draws the flag at DWP's Move to Universal Credit claim rates, as
+uk-data#534 does (a draft, at ``c67077a66``):
+
+* a benefit unit with a member reporting Universal Credit, a unit already
+ drawn to claim it, and a unit reporting none of the six legacy benefits are
+ true, the engine's default;
+* each other unit is drawn at ``(r - p) / (1 - p)``, clipped to [0, 1]. ``r``
+ is DWP's claimed / (claimed + did not claim) for the unit's combination of
+ legacy benefits, or the all-households rate where DWP reports none; ``p`` is
+ the combination's share of Great Britain's such units already drawn to
+ claim, at the spine's design weights (uk-data#534's is unweighted), and the
+ probability applies to the combination's units in Northern Ireland too.
+ So, in expectation, the weighted share of Great Britain's drawn units
+ claiming at the closure in each combination is DWP's rate wherever ``p`` is
+ at most ``r``; where ``p`` exceeds it the probability is 0, and the receipt
+ flags the combination (``rate_unreachable``), never ``p`` itself.
+
+Two limits carry over from uk-data#534: the drawn cohort includes units on
+the Pension Credit route, whose legacy benefits policyengine-uk does not
+close, which dilutes the rate among the units it does move; and DWP's rates
+count every household sent a notice, including households not entitled to
+Universal Credit.
+
+The rates are DWP's Stat-Xplore households sent a migration notice in Great
+Britain, July 2022 to June 2026, by legacy benefits and move status, vendored
+from the pinned Chronicle feed (``dwp_move_to_uc_facts.json``); households
+still in progress are left out. Each unit's draw reads an identity-keyed
+uniform.
+"""
+
+from __future__ import annotations
+
+from collections.abc import Mapping, Sequence
+from dataclasses import dataclass, field
+from typing import Any
+
+import numpy as np
+import pandas as pd
+
+from microcosm.build.source_manifest import SourceStageSpec
+from microcosm.build.stochastic_assignment import stable_identity_uniforms
+from microcosm.build.uk_runtime.cgt_structure import _assert_closed_world_operations
+from microcosm.build.uk_runtime.national_frame import (
+ uk_household_weight_kind,
+ uk_national_frame,
+ uk_time_period,
+ validate_uk_national_frame,
+)
+from microcosm.build.uk_runtime.receipt_counts import (
+ distinct_count,
+ small_cell_share,
+ source_household_ids,
+ support_band,
+)
+from microcosm.build.uk_runtime.uc_capital_coherence import (
+ _benunit_households,
+ _household_to_benunit_weights,
+)
+from microcosm.frame import Frame
+
+__all__ = [
+ "LEGACY_BENEFITS",
+ "LEGACY_CLOSURE_OPERATION_KIND",
+ "LEGACY_CLOSURE_OUTPUT",
+ "LEGACY_CLOSURE_RECORD_SETS",
+ "LEGACY_CLOSURE_RESOURCE",
+ "LEGACY_CLOSURE_STAGE_NAME",
+ "UKLegacyClosureTakeUpResult",
+ "UKLegacyClosureTakeUpStageTransform",
+ "assign_uc_claim_at_legacy_closure",
+ "legacy_benefit_combinations",
+ "legacy_closure_claim_probabilities",
+ "legacy_closure_operation_parameters",
+ "load_move_to_uc_claim_rates",
+ "move_to_uc_claim_rates_from_rows",
+]
+
+LEGACY_CLOSURE_STAGE_NAME = "uc_legacy_closure_take_up"
+LEGACY_CLOSURE_OPERATION_KIND = "draw_uc_claim_at_legacy_closure"
+LEGACY_CLOSURE_OUTPUT = "would_claim_uc_at_legacy_closure"
+LEGACY_CLOSURE_RESOURCE = "dwp_move_to_uc_facts.json"
+#: The build period DWP's cumulative Move to UC rates are mapped to (the verify
+#: operation's ``mapped_build_period``); the stage refuses a frame at any other.
+LEGACY_CLOSURE_BUILD_PERIOD = 2024
+_DETAIL_RECORD_SET = "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06"
+#: The cells by combination and move status, and their totals (which carry the
+#: all-households row).
+LEGACY_CLOSURE_RECORD_SETS: tuple[str, ...] = (
+ _DETAIL_RECORD_SET,
+ f"{_DETAIL_RECORD_SET}.total",
+)
+_CONCEPT = "dwp.mtuc_households_sent_migration_notice"
+_CLAIMED = "Claimed UC"
+_DID_NOT_CLAIM = "Did not claim UC - Legacy benefit closed"
+_ALL = "all"
+#: The legacy means-tested benefits, in the order a combination key joins them
+#: (uk-data#534's order), with DWP's Stat-Xplore names.
+LEGACY_BENEFITS: tuple[tuple[str, str], ...] = (
+ ("child_tax_credit", "Child Tax Credit"),
+ ("working_tax_credit", "Working Tax Credit"),
+ ("housing_benefit", "Housing Benefit"),
+ ("esa_income", "Employment Support Allowance"),
+ ("income_support", "Income Support"),
+ ("jsa_income", "Jobseekers Allowance"),
+)
+_STREAM_SEED = 0
+
+
+def _combination_key(label: str) -> str:
+ """DWP's label ("Child Tax Credit and Housing Benefit") as a key."""
+
+ if label == _ALL:
+ return _ALL
+ text = label.removesuffix(" only")
+ names = {dwp: name for name, dwp in LEGACY_BENEFITS}
+ parts = text.split(" and ")
+ unknown = [part for part in parts if part not in names]
+ if unknown:
+ raise ValueError(f"Unknown legacy benefit in Move to UC label {label!r}.")
+ members = {names[part] for part in parts}
+ return "+".join(name for name, _ in LEGACY_BENEFITS if name in members)
+
+
+def move_to_uc_claim_rates_from_rows(
+ rows: Sequence[Mapping[str, Any]],
+) -> dict[str, float]:
+ """Claim rate by combination: claimed / (claimed + did not claim)."""
+
+ cells: dict[tuple[str, str], float] = {}
+ for row in rows:
+ if row.get("concept") != _CONCEPT:
+ continue
+ dimensions = row.get("dimensions") or {}
+ key = (
+ _combination_key(str(dimensions.get("legacy_benefit"))),
+ str(dimensions.get("move_status")),
+ )
+ if key in cells:
+ raise ValueError(f"The Move to UC facts repeat {key}.")
+ cells[key] = float(row["value"])
+ rates: dict[str, float] = {}
+ for combination in sorted({key for key, _ in cells}):
+ claimed = cells.get((combination, _CLAIMED))
+ did_not = cells.get((combination, _DID_NOT_CLAIM))
+ if claimed is None or did_not is None or claimed + did_not <= 0:
+ raise ValueError(
+ f"The Move to UC facts lack the claimed and closed counts for "
+ f"{combination!r}."
+ )
+ rates[combination] = claimed / (claimed + did_not)
+ if _ALL not in rates:
+ raise ValueError("The Move to UC facts carry no all-households row.")
+ if not all(0.0 < rate <= 1.0 for rate in rates.values()):
+ raise ValueError("Move to UC claim rates must lie in (0, 1].")
+ return rates
+
+
+def load_move_to_uc_claim_rates() -> dict[str, float]:
+ """The rates from the committed vendored resource, checked against the pin."""
+
+ from microcosm.build.uk_runtime.ledger_fact_vendoring import vendored_rows
+
+ return move_to_uc_claim_rates_from_rows(vendored_rows(LEGACY_CLOSURE_RESOURCE))
+
+
+def _reported_by_benunit(
+ person: pd.DataFrame, benunit: pd.DataFrame, column: str
+) -> np.ndarray:
+ if column not in person.columns:
+ raise ValueError(f"The legacy closure draw needs person {column!r}.")
+ values = pd.to_numeric(person[column], errors="raise").to_numpy(dtype=float)
+ reporters = person.loc[values > 0, "person_benunit_id"].unique()
+ return benunit["benunit_id"].isin(reporters).to_numpy()
+
+
+def legacy_benefit_combinations(
+ person: pd.DataFrame, benunit: pd.DataFrame
+) -> np.ndarray:
+ """Each benefit unit's reported legacy benefits, joined by "+"."""
+
+ reported = [
+ _reported_by_benunit(person, benunit, f"{name}_reported")
+ for name, _ in LEGACY_BENEFITS
+ ]
+ return np.asarray(
+ [
+ "+".join(
+ name for (name, _), has in zip(LEGACY_BENEFITS, row, strict=True) if has
+ )
+ for row in zip(*reported, strict=True)
+ ],
+ dtype=object,
+ )
+
+
+def legacy_closure_claim_probabilities(
+ *,
+ combination: np.ndarray,
+ drawn: np.ndarray,
+ claims_anyway: np.ndarray,
+ weights: np.ndarray,
+ rates: Mapping[str, float],
+ great_britain: np.ndarray,
+ source_ids: np.ndarray,
+) -> tuple[np.ndarray, dict[str, dict[str, object]]]:
+ """Each drawn unit's claim probability, and a receipt by combination.
+
+ Within a combination, ``(r - p) / (1 - p)`` clipped to [0, 1], where ``r``
+ is DWP's rate and ``p`` the weighted share of Great Britain's drawn units
+ that would claim anyway (DWP's rates cover Great Britain); the probability
+ 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.
+ """
+
+ gb = np.asarray(great_britain, dtype=bool)
+ probability = np.zeros(len(combination))
+ receipt: dict[str, dict[str, object]] = {}
+
+ def count(mask: np.ndarray) -> int:
+ return distinct_count(source_ids, mask)
+
+ for key in sorted(set(combination[drawn])):
+ cohort = drawn & (combination == key)
+ basis = cohort & gb
+ rate = float(rates.get(key, rates[_ALL]))
+ basis_weight = float(weights[basis].sum())
+ p = (
+ float(weights[basis & claims_anyway].sum()) / basis_weight
+ if basis_weight > 0
+ else 0.0
+ )
+ probability[cohort] = (
+ 0.0 if p >= 1 else float(np.clip((rate - p) / (1 - p), 0.0, 1.0))
+ )
+
+ # 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
+ # 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.
+ 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"
+ else:
+ flag = bool(p > rate)
+ receipt[str(key)] = {
+ "rate": rate,
+ "rate_source": "combination" if key in rates else "all_households",
+ "rate_unreachable": flag,
+ "support": support_band(count(cohort)),
+ }
+ return probability, receipt
+
+
+@dataclass(frozen=True)
+class UKLegacyClosureTakeUpResult:
+ """The frame with the drawn flag, and the stage's aggregate receipt."""
+
+ frame: Frame
+ receipt: dict[str, object]
+
+ def evidence(self) -> dict[str, object]:
+ return {"stage": LEGACY_CLOSURE_STAGE_NAME, **self.receipt}
+
+
+def assign_uc_claim_at_legacy_closure(
+ frame: Frame, *, rates: Mapping[str, float]
+) -> UKLegacyClosureTakeUpResult:
+ """Draw ``would_claim_uc_at_legacy_closure`` for every benefit unit."""
+
+ validate_uk_national_frame(frame)
+ # Compared as the label the frame carries, so that a "2024-25" or a later
+ # year is refused by this message, not by a failed int().
+ period = uk_time_period(frame)
+ if period != str(LEGACY_CLOSURE_BUILD_PERIOD):
+ raise ValueError(
+ "DWP's Move to UC claim rates are mapped to build period "
+ f"{LEGACY_CLOSURE_BUILD_PERIOD}, but the frame's period is {period!r}."
+ )
+ person = frame.table("person")
+ benunit = frame.table("benunit").copy()
+ household = frame.table("household")
+ if LEGACY_CLOSURE_OUTPUT in benunit.columns:
+ raise ValueError(
+ f"{LEGACY_CLOSURE_OUTPUT!r} is already stored: this stage is its only "
+ "writer."
+ )
+ if "would_claim_uc" not in benunit.columns:
+ raise ValueError("The legacy closure draw needs benunit 'would_claim_uc'.")
+ # The graph node declares the lineage, since the executor hands a stage
+ # only its declared cells.
+ household_sources = pd.Series(
+ source_household_ids(household, stage="The legacy closure stage"),
+ index=household["household_id"].to_numpy(),
+ )
+ household_weights = frame.weights_for("household")
+ weights = _household_to_benunit_weights(
+ benunit,
+ person=person,
+ household=household,
+ household_weights=np.asarray(household_weights.values, dtype=float),
+ )
+ combination = legacy_benefit_combinations(person, benunit)
+ on_uc = _reported_by_benunit(person, benunit, "universal_credit_reported")
+ claims_anyway = benunit["would_claim_uc"].to_numpy().astype(bool)
+ drawn = ~on_uc & (combination != "")
+ unit_households = pd.Series(_benunit_households(benunit, person=person))
+ by_household = household.set_index("household_id")
+ great_britain = (
+ unit_households.map(by_household["region"].astype(str)).to_numpy()
+ != "NORTHERN_IRELAND"
+ )
+ source_ids = unit_households.map(household_sources).to_numpy()
+ probability, combinations_drawn = legacy_closure_claim_probabilities(
+ combination=combination,
+ drawn=drawn,
+ claims_anyway=claims_anyway,
+ weights=weights,
+ rates=rates,
+ great_britain=great_britain,
+ source_ids=source_ids,
+ )
+ uniforms = stable_identity_uniforms(
+ benunit["benunit_id"].to_numpy(), seed=_STREAM_SEED, salt=LEGACY_CLOSURE_OUTPUT
+ )
+ flag = ~drawn | claims_anyway | (uniforms < probability)
+ benunit[LEGACY_CLOSURE_OUTPUT] = flag
+ result = uk_national_frame(
+ person=person.copy(),
+ benunit=benunit,
+ household=household.copy(),
+ time_period=uk_time_period(frame),
+ weight_kind=uk_household_weight_kind(frame),
+ household_weights=household_weights.values,
+ mass_log=frame.mass_log,
+ )
+ 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).
+ def sources(mask: np.ndarray) -> int:
+ return distinct_count(source_ids, mask)
+
+ gb_drawn = drawn & great_britain
+ gb_sources = sources(gb_drawn)
+ 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
+ if not drawn_weight:
+ share: float | str | None = None
+ elif share_small:
+ share = "<10"
+ else:
+ share = small_cell_share(
+ float(weights[claiming].sum()) / drawn_weight, gb_sources
+ )
+ receipt = {
+ "combinations": combinations_drawn,
+ "great_britain_drawn_benunit_weight": small_cell_share(
+ drawn_weight, gb_sources
+ ),
+ "great_britain_weighted_share_claiming_at_closure": share,
+ "p_basis": "spine_design_weights_great_britain",
+ }
+ return UKLegacyClosureTakeUpResult(frame=result, receipt=receipt)
+
+
+def legacy_closure_operation_parameters() -> tuple[tuple[str, dict[str, object]], ...]:
+ """The reviewed operations the manifest must carry verbatim."""
+
+ return (
+ (
+ "verify_vendored_fact_resource",
+ {
+ "artifact_role": "move_to_uc_facts",
+ "resource": LEGACY_CLOSURE_RESOURCE,
+ "feed_pin": "chronicle_feed.json",
+ "record_sets": list(LEGACY_CLOSURE_RECORD_SETS),
+ "source_vintage": "July 2022 to June 2026",
+ "mapped_build_period": LEGACY_CLOSURE_BUILD_PERIOD,
+ "period_mapping": "cumulative_claim_rates_applied_at_every_closure",
+ "require_before_source_read": True,
+ "runtime_sha256_required": True,
+ "fail_on_mismatch": True,
+ },
+ ),
+ (
+ LEGACY_CLOSURE_OPERATION_KIND,
+ {
+ "output": LEGACY_CLOSURE_OUTPUT,
+ "port_of": "uk-data#534 at c67077a66",
+ "legacy_benefits": [name for name, _ in LEGACY_BENEFITS],
+ "true_without_draw": (
+ "a member reports universal_credit_reported, would_claim_uc is "
+ "true, or no member reports a legacy benefit"
+ ),
+ "rate": (
+ "claimed / (claimed + did not claim) for the combination, the "
+ "all-households rate where DWP reports none"
+ ),
+ "probability": "clip((rate - p) / (1 - p), 0, 1)",
+ "p": (
+ "the combination's weighted share of Great Britain's drawn "
+ "units with would_claim_uc true, at the spine's design "
+ "weights; the probability applies in Northern Ireland too"
+ ),
+ "stream": {"salt": LEGACY_CLOSURE_OUTPUT, "seed": _STREAM_SEED},
+ },
+ ),
+ )
+
+
+def _assert_stage_parameters(stage: SourceStageSpec) -> None:
+ _assert_closed_world_operations(stage, legacy_closure_operation_parameters())
+ if stage.stage != LEGACY_CLOSURE_STAGE_NAME:
+ raise ValueError(
+ f"Expected stage {LEGACY_CLOSURE_STAGE_NAME!r}, got {stage.stage!r}."
+ )
+ if tuple(stage.outputs) != (LEGACY_CLOSURE_OUTPUT,) or tuple(stage.rewrites):
+ raise ValueError(
+ f"The legacy closure stage writes {LEGACY_CLOSURE_OUTPUT!r} only."
+ )
+ if stage.grain != "benunit":
+ raise ValueError(
+ f"The legacy closure stage is benunit grain, got {stage.grain!r}."
+ )
+
+
+@dataclass(frozen=True)
+class UKLegacyClosureTakeUpStageTransform:
+ """Whole-stage callable for the Universal Credit claims at the closure."""
+
+ stage: SourceStageSpec
+ #: The claim rates; read from the vendored DWP facts when not given.
+ rates: Mapping[str, float] | None = field(default=None, repr=False)
+ last_result: UKLegacyClosureTakeUpResult | None = field(default=None, init=False)
+
+ def __post_init__(self) -> None:
+ _assert_stage_parameters(self.stage)
+
+ def __call__(self, frame: Frame) -> Frame:
+ _assert_stage_parameters(self.stage)
+ rates = self.rates if self.rates is not None else load_move_to_uc_claim_rates()
+ result = assign_uc_claim_at_legacy_closure(frame, rates=rates)
+ object.__setattr__(self, "last_result", result)
+ return result.frame
+
+ @staticmethod
+ def output_columns() -> tuple[str, ...]:
+ return (LEGACY_CLOSURE_OUTPUT,)
+
+ def checkpoint_metadata(self) -> dict[str, object]:
+ if self.last_result is None:
+ raise RuntimeError("checkpoint metadata requires a completed stage run.")
+ return {"evidence": self.last_result.evidence()}
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 96b93474b..7e2d34a1f 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
@@ -500,7 +500,9 @@ def _write_uk_single_year_tables(
# no engine input.
"reports_rent_from_other_property",
),
- "household": ("property_wealth",),
+ # The value the spine's regional home values replaced (microcosm#1112):
+ # the dense node ranks on it, and it is no engine input.
+ "household": ("property_wealth", "main_residence_value_rank_basis"),
}
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/property_localisation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/property_localisation.py
index 01d42bf35..f9528875f 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/property_localisation.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/property_localisation.py
@@ -48,6 +48,7 @@
"METHOD_VERSION",
"PROPERTY_LOCALISATION_MODES",
"PROPERTY_STREAM_EXPERIMENT",
+ "RANK_BASIS_COLUMN",
"SUPPORT_STRATUM_LOWER",
"QUANTILES_SOURCE",
"BandMix",
@@ -56,6 +57,7 @@
"load_value_knots",
"localise_bands",
"localise_values",
+ "main_residence_rank_basis",
"owner_uniforms",
"spine_household_keys",
]
@@ -68,6 +70,9 @@
#: Owner households at or above this within-region rank are the high-value
#: support stratum (microcosm#1240 fix 1, ruled top 5%).
SUPPORT_STRATUM_LOWER = 0.95
+#: The value the spine's regional home values replace (microcosm#1112), kept
+#: so this node ranks owners on what it ranked them on before that stage.
+RANK_BASIS_COLUMN = "main_residence_value_rank_basis"
COUNCIL_TAX_BANDS: tuple[str, ...] = ("A", "B", "C", "D", "E", "F", "G", "H", "I")
KNOTS_KIND = "uk_high_value_home_value_knots"
BAND_MIX_KIND = "uk_voa_council_tax_band_mix_lsoa"
@@ -186,6 +191,26 @@ def spine_household_keys(
return np.asarray(keys, dtype=object)
+def main_residence_rank_basis(household: pd.DataFrame, *, declared: bool) -> np.ndarray:
+ """The value owners are ranked on: the one the regional stage replaced.
+
+ ``declared`` says whether the regional home values stage stored
+ ``RANK_BASIS_COLUMN`` (the dense graph then declares it in the value
+ node's slice). A declared column must arrive and an undeclared one must
+ not: ranking on the regional values instead would move every owner's
+ draw, so either mismatch refuses rather than falling back.
+ """
+
+ if declared != (RANK_BASIS_COLUMN in household):
+ raise ValueError(
+ f"The value node's rank basis {RANK_BASIS_COLUMN!r} is "
+ f"{'declared but missing' if declared else 'present but undeclared'}; "
+ "owners must rank on the value the regional stage replaced."
+ )
+ column = RANK_BASIS_COLUMN if declared else "main_residence_value"
+ return household[column].to_numpy(dtype=float)
+
+
def owner_mask(tenure_type: np.ndarray) -> np.ndarray:
categories = np.array(
[
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
new file mode 100644
index 000000000..0a471be66
--- /dev/null
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/property_purchases.py
@@ -0,0 +1,944 @@
+"""Annual purchases of additional dwellings and non-residential property
+(uk-data#556, ported from uk-data#573; microcosm#1095).
+
+policyengine-uk 2.134.1 (pe-uk#2241) turned
+``additional_residential_property_purchased`` and
+``non_residential_property_purchased`` from formulas into inputs that default
+to nil. Before it, a household that drew a main-home purchase was taken to buy
+its whole ``other_residential_property_value`` at the higher rates and its whole
+``non_residential_property_value`` as well; since it, a purchasing household
+pays SDLT on its main home only unless the data supplies the two purchases.
+
+This stage ports uk-data#573 (a draft, at ``07f6b460f``) at the spine's design
+weights, after the regional uprating and the support copies, so every copy
+draws on its own:
+
+* **Who can buy.** A household whose stock of the kind is at least the
+ GBP 40,000 HMRC's tables cover, with positive weight; at most one purchase of
+ each kind a year.
+* **Who buys.** A purchase hazard proportional to the stock over the weighted
+ mean stock of eligible England-and-Northern-Ireland owners (exponent 1, so
+ larger portfolios trade more often). Each household's exponential event
+ score ``-log(1 - u) / hazard`` reads its own identity-keyed uniform; the
+ score threshold is the one whose weighted count of
+ England-and-Northern-Ireland purchasers comes closest to HMRC's
+ transactions. The same threshold applies in Scotland and Wales, whose
+ transaction taxes have no target here.
+* **At what price.** A band-mean price drawn at HMRC's band shares on a second
+ identity-keyed stream, times one common scale fitted by bisection so that the
+ weighted England-and-Northern-Ireland purchase value equals HMRC's; every
+ price is at least GBP 40,000 and never above the household's stock.
+
+The targets are HMRC's Annual Stamp Tax Statistics 2024 to 2025 (corrected),
+vendored from the pinned Chronicle feed (``hmrc_stamp_tax_facts.json``):
+
+* additional dwellings: Table 6b's higher-rates (HRAD) transactions and value
+ for 2024-25, which cover every buyer, allocated to households by
+ individuals' shares of Table 8a's residential transactions and value (what
+ other buyers would take is companies'); the price bands are Table 6b's, with
+ the five above GBP 2m combined, as uk-data#573 does;
+* non-residential: Table 8b's individuals for 2024-25, and its six bands.
+
+Households' HRAD is not published, so the allocation by individuals' shares
+of all Table 8a residential transactions is an assumption, as uk-data#573
+says, not an observed household series. uk-data#573 gives the household
+lower bounds Tables 6b and 8a imply, 87,200 transactions and GBP 33.28bn;
+the allocation probably overstates households' purchases, since nearly all
+receipts at or below the GBP 250,000 nil-rate band are surcharge, and other
+buyers' receipts there imply more higher-rates transactions than their share
+of all transactions gives them.
+
+The stage fits transactions and value only. Households' SDLT is fitted at
+build level through ``obr.sdlt``; uk-data#573 also holds its file's
+higher-rates SDLT within 30% of HMRC's in a test, which this port does not
+carry.
+"""
+
+from __future__ import annotations
+
+from collections.abc import Mapping, Sequence
+from dataclasses import dataclass, field
+from typing import Any
+
+import numpy as np
+import pandas as pd
+
+from microcosm.build.source_manifest import SourceStageSpec
+from microcosm.build.stochastic_assignment import stable_identity_uniforms
+from microcosm.build.uk_runtime.cgt_structure import _assert_closed_world_operations
+from microcosm.build.uk_runtime.national_frame import (
+ uk_household_weight_kind,
+ uk_national_frame,
+ uk_time_period,
+ validate_uk_national_frame,
+)
+from microcosm.build.uk_runtime.receipt_counts import (
+ distinct_count,
+ extreme_count,
+ small_cell_share,
+ source_household_ids,
+ support_band,
+)
+from microcosm.build.uk_runtime.rowwise_geography import FRS_REGION_TO_COUNTRY
+from microcosm.frame import Frame, MassChangeRecord
+
+__all__ = [
+ "HMRC_SDLT_MINIMUM_CONSIDERATION",
+ "PROPERTY_PURCHASE_BAND_IDS",
+ "PROPERTY_PURCHASE_KINDS",
+ "PROPERTY_PURCHASES_OPERATION_KIND",
+ "PROPERTY_PURCHASES_OUTPUT_COLUMNS",
+ "PROPERTY_PURCHASES_RECORD_SETS",
+ "PROPERTY_PURCHASES_RESOURCE",
+ "PROPERTY_PURCHASES_STAGE_NAME",
+ "PURCHASE_MINIMUM_VALUE_SHARE",
+ "SDLT_REGIONS",
+ "UKPropertyPurchaseImputation",
+ "UKPropertyPurchaseKind",
+ "UKPropertyPurchaseTarget",
+ "UKPropertyPurchaseTargets",
+ "UKPropertyPurchasesResult",
+ "UKPropertyPurchasesStageTransform",
+ "impute_property_purchase_prices",
+ "impute_property_purchases",
+ "load_property_purchase_targets",
+ "property_purchase_targets_from_rows",
+ "property_purchase_uniforms",
+ "property_purchases_operation_parameters",
+ "sdlt_region_mask",
+ "select_property_purchasers",
+]
+
+PROPERTY_PURCHASES_STAGE_NAME = "property_purchases"
+PROPERTY_PURCHASES_OPERATION_KIND = "impute_annual_property_purchases"
+PROPERTY_PURCHASES_RESOURCE = "hmrc_stamp_tax_facts.json"
+#: The build period the 2024-25 Stamp Tax facts are mapped to (the verify
+#: operation's ``mapped_build_period``); the stage refuses a frame at any other.
+PROPERTY_PURCHASES_BUILD_PERIOD = 2024
+_HRAD_RECORD_SET = "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024"
+_RESIDENTIAL_INDIVIDUALS_RECORD_SET = (
+ "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024"
+)
+_RESIDENTIAL_OTHER_BUYERS_RECORD_SET = (
+ "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024"
+)
+_NON_RESIDENTIAL_INDIVIDUALS_RECORD_SET = (
+ "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+)
+#: The record sets the stage reads, in the order the manifest pins them.
+PROPERTY_PURCHASES_RECORD_SETS = (
+ _HRAD_RECORD_SET,
+ _RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+ _RESIDENTIAL_OTHER_BUYERS_RECORD_SET,
+ _NON_RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+)
+#: HMRC's tables cover SDLT, which applies in England and Northern Ireland.
+SDLT_REGIONS = tuple(
+ region
+ for region, country in FRS_REGION_TO_COUNTRY.items()
+ if country in {"England", "Northern Ireland"}
+)
+#: Larger portfolios are taken to trade more often (uk-data#573's assumption).
+PURCHASE_STOCK_EXPONENT = 1.0
+#: Where the purchasers' stock cannot carry HMRC's purchase value, every
+#: purchaser buys at its stock and the receipt records the shortfall (María's
+#: ruling of 2026-10-16, microcosm#1095); below this share of the value the
+#: stage refuses, as uk-data#573 refuses any shortfall.
+PURCHASE_MINIMUM_VALUE_SHARE = 0.8
+#: Table 6b's bands above GBP 2m, combined into one as uk-data#573 does.
+_HRAD_TOP_BANDS = (
+ "gbp_2m_to_3m",
+ "gbp_3m_to_4m",
+ "gbp_4m_to_5m",
+ "gbp_5m_to_10m",
+ "over_gbp_10m",
+)
+_TOTAL_BAND = "all_price_bands"
+_BAND_ORDER = (
+ "gbp_250k_or_less",
+ "gbp_250k_to_500k",
+ "gbp_500k_to_1m",
+ "gbp_1m_to_1_5m",
+ "gbp_1_5m_to_2m",
+ "over_gbp_2m",
+)
+#: The price bands every target carries, in order.
+PROPERTY_PURCHASE_BAND_IDS = _BAND_ORDER
+#: HMRC's Stamp Tax tables count transactions of GBP 40,000 or above (each
+#: sheet's note), the floor on every purchase and on the stock that can buy.
+#: Chronicle carries it as a universe constraint, which vendored rows drop.
+HMRC_SDLT_MINIMUM_CONSIDERATION = 40_000.0
+_BISECTION_STEPS = 80
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchaseKind:
+ """One kind of purchase: the stock it is drawn from and its streams."""
+
+ name: str
+ stock: str
+ output: str
+ event_salt: str
+ price_salt: str
+
+
+PROPERTY_PURCHASE_KINDS = (
+ UKPropertyPurchaseKind(
+ name="additional_residential",
+ stock="other_residential_property_value",
+ output="additional_residential_property_purchased",
+ event_salt="additional_residential_property_purchased",
+ price_salt="additional_residential_property_purchased_price",
+ ),
+ UKPropertyPurchaseKind(
+ name="non_residential",
+ stock="non_residential_property_value",
+ output="non_residential_property_purchased",
+ event_salt="non_residential_property_purchased",
+ price_salt="non_residential_property_purchased_price",
+ ),
+)
+PROPERTY_PURCHASES_OUTPUT_COLUMNS = tuple(
+ kind.output for kind in PROPERTY_PURCHASE_KINDS
+)
+_STREAM_SEED = 0
+
+
+def property_purchase_uniforms(
+ household_ids: np.ndarray, kind: UKPropertyPurchaseKind
+) -> tuple[np.ndarray, np.ndarray]:
+ """The event and price uniforms of one kind, keyed by household identity."""
+
+ return (
+ stable_identity_uniforms(
+ household_ids, seed=_STREAM_SEED, salt=kind.event_salt
+ ),
+ stable_identity_uniforms(
+ household_ids, seed=_STREAM_SEED, salt=kind.price_salt
+ ),
+ )
+
+
+PROPERTY_PURCHASES_MASS_CHANGE_REASON = (
+ "Annual property purchases imputed on the source spine: household weights "
+ "pass through unchanged and total household mass is conserved."
+)
+_MASS_GATE_COUPLING = (
+ "The terminal family gate requires a valid mass-conserving MassChangeRecord "
+ "carrying exactly this stage-specific reason."
+)
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchaseTarget:
+ """England-and-Northern-Ireland household purchases of one kind, one year."""
+
+ property_type: str
+ transactions: float
+ value: float
+ band_ids: tuple[str, ...]
+ band_transactions: tuple[float, ...]
+ band_values: tuple[float, ...]
+ minimum_price: float
+
+ def __post_init__(self) -> None:
+ if (
+ not (
+ len(self.band_ids)
+ == len(self.band_transactions)
+ == len(self.band_values)
+ )
+ or not self.band_ids
+ ):
+ raise ValueError(
+ f"{self.property_type} purchase bands must align and be non-empty."
+ )
+ numbers = (
+ self.transactions,
+ self.value,
+ self.minimum_price,
+ *self.band_transactions,
+ *self.band_values,
+ )
+ if not all(np.isfinite(number) and number > 0 for number in numbers):
+ raise ValueError(
+ f"{self.property_type} purchase targets and bands must be positive."
+ )
+
+ def band_prices(self) -> np.ndarray:
+ return np.asarray(self.band_values, dtype=float) / np.asarray(
+ self.band_transactions, dtype=float
+ )
+
+ def band_shares(self) -> np.ndarray:
+ """Band shares normalised by their own sum: bands are rounded."""
+ counts = np.asarray(self.band_transactions, dtype=float)
+ return counts / counts.sum()
+
+ def payload(self) -> dict[str, object]:
+ return {
+ "property_type": self.property_type,
+ "transactions": float(self.transactions),
+ "value": float(self.value),
+ "band_ids": list(self.band_ids),
+ "band_transactions": [float(value) for value in self.band_transactions],
+ "band_values": [float(value) for value in self.band_values],
+ "minimum_price": float(self.minimum_price),
+ }
+
+ @classmethod
+ def from_payload(cls, payload: Mapping[str, Any]) -> UKPropertyPurchaseTarget:
+ return cls(
+ property_type=str(payload["property_type"]),
+ transactions=float(payload["transactions"]),
+ value=float(payload["value"]),
+ band_ids=tuple(str(value) for value in payload["band_ids"]),
+ band_transactions=tuple(
+ float(value) for value in payload["band_transactions"]
+ ),
+ band_values=tuple(float(value) for value in payload["band_values"]),
+ minimum_price=float(payload["minimum_price"]),
+ )
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchaseTargets:
+ """The two kinds' targets and the facts they were derived from.
+
+ The vendored HMRC facts always give both kinds. A kind without a target is
+ not imputed, and its purchases stay nil: only the synthetic parity fixture,
+ whose small frame holds no stock of a kind, passes one.
+ """
+
+ additional_residential: UKPropertyPurchaseTarget | None
+ non_residential: UKPropertyPurchaseTarget | None
+ #: How the household HRAD targets were allocated (the published inputs).
+ derivation: Mapping[str, float] = field(default_factory=dict)
+
+ def for_kind(self, name: str) -> UKPropertyPurchaseTarget | None:
+ if name == "additional_residential":
+ return self.additional_residential
+ if name == "non_residential":
+ return self.non_residential
+ raise KeyError(name)
+
+ def payload(self) -> dict[str, object]:
+ return {
+ "additional_residential": (
+ None
+ if self.additional_residential is None
+ else self.additional_residential.payload()
+ ),
+ "non_residential": (
+ None if self.non_residential is None else self.non_residential.payload()
+ ),
+ "derivation": {key: float(value) for key, value in self.derivation.items()},
+ }
+
+ @classmethod
+ def from_payload(cls, payload: Mapping[str, Any]) -> UKPropertyPurchaseTargets:
+ def kind(value: Mapping[str, Any] | None) -> UKPropertyPurchaseTarget | None:
+ return (
+ None if value is None else UKPropertyPurchaseTarget.from_payload(value)
+ )
+
+ return cls(
+ additional_residential=kind(payload["additional_residential"]),
+ non_residential=kind(payload["non_residential"]),
+ derivation={
+ str(key): float(value)
+ for key, value in dict(payload.get("derivation") or {}).items()
+ },
+ )
+
+
+def _record_set(row: Mapping[str, Any]) -> str:
+ return str((row.get("layout") or {}).get("record_set_id") or "")
+
+
+def _band(row: Mapping[str, Any]) -> str:
+ return str((row.get("layout") or {}).get("groupby_value_id") or "")
+
+
+def _cells(
+ rows: Sequence[Mapping[str, Any]], *, record_set: str, concept: str
+) -> dict[str, float]:
+ """Values by band of one record set and concept, refused if duplicated."""
+
+ cells: dict[str, float] = {}
+ for row in rows:
+ if _record_set(row) != record_set or row.get("concept") != concept:
+ continue
+ band = _band(row)
+ if band in cells:
+ raise ValueError(f"{record_set} {concept} repeats band {band!r}.")
+ cells[band] = float(row["value"])
+ if _TOTAL_BAND not in cells:
+ raise ValueError(f"{record_set} carries no {concept} total ({_TOTAL_BAND}).")
+ return cells
+
+
+def _bands(
+ counts: Mapping[str, float],
+ values: Mapping[str, float],
+ *,
+ combine: tuple[str, ...],
+) -> tuple[tuple[str, ...], tuple[float, ...], tuple[float, ...]]:
+ detail_counts = {band: n for band, n in counts.items() if band != _TOTAL_BAND}
+ detail_values = {band: v for band, v in values.items() if band != _TOTAL_BAND}
+ if combine:
+ missing = [band for band in combine if band not in detail_counts]
+ if missing:
+ raise ValueError(f"The bands to combine are missing: {missing}.")
+ detail_counts["over_gbp_2m"] = sum(detail_counts.pop(band) for band in combine)
+ detail_values["over_gbp_2m"] = sum(detail_values.pop(band) for band in combine)
+ if set(detail_counts) != set(_BAND_ORDER) or set(detail_values) != set(_BAND_ORDER):
+ raise ValueError(
+ "The purchase price bands must be exactly "
+ f"{_BAND_ORDER}; got {sorted(detail_counts)} / {sorted(detail_values)}."
+ )
+ return (
+ _BAND_ORDER,
+ tuple(float(detail_counts[band]) for band in _BAND_ORDER),
+ tuple(float(detail_values[band]) for band in _BAND_ORDER),
+ )
+
+
+def property_purchase_targets_from_rows(
+ rows: Sequence[Mapping[str, Any]],
+) -> UKPropertyPurchaseTargets:
+ """Household purchase targets from the vendored HMRC Stamp Tax rows."""
+
+ minimum = HMRC_SDLT_MINIMUM_CONSIDERATION
+ hrad_count = _cells(
+ rows, record_set=_HRAD_RECORD_SET, concept="hmrc.sdlt.hrad_transactions"
+ )
+ hrad_value = _cells(
+ rows, record_set=_HRAD_RECORD_SET, concept="hmrc.sdlt.hrad_property_value"
+ )
+ individuals_count = _cells(
+ rows,
+ record_set=_RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+ concept="hmrc.sdlt.transactions",
+ )[_TOTAL_BAND]
+ individuals_value = _cells(
+ rows,
+ record_set=_RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+ concept="hmrc.sdlt.property_value",
+ )[_TOTAL_BAND]
+ other_count = _cells(
+ rows,
+ record_set=_RESIDENTIAL_OTHER_BUYERS_RECORD_SET,
+ concept="hmrc.sdlt.transactions",
+ )[_TOTAL_BAND]
+ other_value = _cells(
+ rows,
+ record_set=_RESIDENTIAL_OTHER_BUYERS_RECORD_SET,
+ concept="hmrc.sdlt.property_value",
+ )[_TOTAL_BAND]
+ count_share = individuals_count / (individuals_count + other_count)
+ value_share = individuals_value / (individuals_value + other_value)
+ band_ids, band_counts, band_values = _bands(
+ hrad_count, hrad_value, combine=_HRAD_TOP_BANDS
+ )
+ additional = UKPropertyPurchaseTarget(
+ property_type="additional_residential",
+ transactions=hrad_count[_TOTAL_BAND] * count_share,
+ value=hrad_value[_TOTAL_BAND] * value_share,
+ band_ids=band_ids,
+ band_transactions=band_counts,
+ band_values=band_values,
+ minimum_price=minimum,
+ )
+ non_residential_count = _cells(
+ rows,
+ record_set=_NON_RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+ concept="hmrc.sdlt.transactions",
+ )
+ non_residential_value = _cells(
+ rows,
+ record_set=_NON_RESIDENTIAL_INDIVIDUALS_RECORD_SET,
+ concept="hmrc.sdlt.property_value",
+ )
+ band_ids, band_counts, band_values = _bands(
+ non_residential_count, non_residential_value, combine=()
+ )
+ non_residential = UKPropertyPurchaseTarget(
+ property_type="non_residential",
+ transactions=non_residential_count[_TOTAL_BAND],
+ value=non_residential_value[_TOTAL_BAND],
+ band_ids=band_ids,
+ band_transactions=band_counts,
+ band_values=band_values,
+ minimum_price=minimum,
+ )
+ return UKPropertyPurchaseTargets(
+ additional_residential=additional,
+ non_residential=non_residential,
+ derivation={
+ "hrad_transactions_all_buyers": hrad_count[_TOTAL_BAND],
+ "hrad_property_value_all_buyers": hrad_value[_TOTAL_BAND],
+ "residential_individuals_transaction_share": count_share,
+ "residential_individuals_value_share": value_share,
+ },
+ )
+
+
+def load_property_purchase_targets() -> UKPropertyPurchaseTargets:
+ """The targets from the committed vendored resource, checked against the pin."""
+
+ from microcosm.build.uk_runtime.ledger_fact_vendoring import vendored_rows
+
+ return property_purchase_targets_from_rows(
+ vendored_rows(PROPERTY_PURCHASES_RESOURCE)
+ )
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchaseImputation:
+ """One kind's purchase prices and its aggregate receipt."""
+
+ prices: np.ndarray
+ receipt: dict[str, object]
+
+
+def select_property_purchasers(
+ *,
+ stock: np.ndarray,
+ weights: np.ndarray,
+ sdlt_mask: np.ndarray,
+ event_uniforms: np.ndarray,
+ transactions: float,
+ minimum_price: float,
+ property_type: str,
+) -> tuple[np.ndarray, float]:
+ """Who buys: the purchasers' mask and the eligible fit-region owner weight.
+
+ A stock-proportional hazard turns each household's uniform into an
+ exponential event score; the threshold is the one whose weighted count of
+ purchasers in the fit regions is closest to ``transactions``, and it applies
+ to every eligible owner, inside the fit regions or not.
+ """
+
+ owners = (stock >= minimum_price) & (weights > 0)
+ eligible = np.flatnonzero(owners & sdlt_mask)
+ eligible_weight = float(weights[eligible].sum())
+ if eligible_weight < transactions:
+ raise ValueError(
+ f"{property_type}: eligible England-and-Northern-Ireland owners carry "
+ "less weight than the purchase target."
+ )
+ reference_stock = float(np.average(stock[eligible], weights=weights[eligible]))
+ hazard = (
+ np.maximum(stock, minimum_price) / reference_stock
+ ) ** PURCHASE_STOCK_EXPONENT
+ events = -np.log1p(-event_uniforms) / hazard
+ ranked = eligible[np.argsort(events[eligible], kind="stable")]
+ cumulative = np.concatenate(([0.0], np.cumsum(weights[ranked])))
+ n_purchases = int(np.argmin(np.abs(cumulative - transactions)))
+ if n_purchases == len(ranked):
+ threshold = np.inf
+ elif n_purchases == 0:
+ threshold = 0.0
+ else:
+ threshold = (events[ranked[n_purchases - 1]] + events[ranked[n_purchases]]) / 2
+ return owners & (events < threshold), eligible_weight
+
+
+def impute_property_purchase_prices(
+ *,
+ stock: np.ndarray,
+ weights: np.ndarray,
+ sdlt_mask: np.ndarray,
+ event_uniforms: np.ndarray,
+ price_uniforms: np.ndarray,
+ target: UKPropertyPurchaseTarget,
+ source_ids: np.ndarray,
+) -> UKPropertyPurchaseImputation:
+ """Purchase prices for one kind, fitting the weighted count and value.
+
+ uk-data#573's ``impute_property_purchase_values``, reading identity-keyed
+ uniforms instead of positional seeded streams.
+ """
+
+ stock = np.asarray(stock, dtype=float)
+ weights = np.asarray(weights, dtype=float)
+ sdlt_mask = np.asarray(sdlt_mask, dtype=bool)
+ event_uniforms = np.asarray(event_uniforms, dtype=float)
+ price_uniforms = np.asarray(price_uniforms, dtype=float)
+ shape = stock.shape
+ if (
+ stock.ndim != 1
+ or weights.shape != shape
+ or sdlt_mask.shape != shape
+ or event_uniforms.shape != shape
+ or price_uniforms.shape != shape
+ ):
+ raise ValueError(
+ "Property stocks, weights, the SDLT mask and the uniforms must be "
+ "aligned vectors."
+ )
+ if (
+ not np.all(np.isfinite(stock))
+ or not np.all(np.isfinite(weights))
+ or np.any(stock < 0)
+ or np.any(weights < 0)
+ ):
+ raise ValueError("Property stocks and weights must be finite and non-negative.")
+ if np.any((event_uniforms < 0) | (event_uniforms >= 1)) or np.any(
+ (price_uniforms < 0) | (price_uniforms >= 1)
+ ):
+ raise ValueError("Purchase uniforms must lie in [0, 1).")
+
+ minimum = target.minimum_price
+ purchased, eligible_weight = select_property_purchasers(
+ stock=stock,
+ weights=weights,
+ sdlt_mask=sdlt_mask,
+ event_uniforms=event_uniforms,
+ transactions=target.transactions,
+ minimum_price=minimum,
+ property_type=target.property_type,
+ )
+ fitted = purchased & sdlt_mask
+ fitted_weights = weights * fitted
+ capacity = float(np.dot(stock, fitted_weights))
+ if capacity < PURCHASE_MINIMUM_VALUE_SHARE * target.value:
+ raise ValueError(
+ f"{target.property_type}: the purchasers' stock carries less than "
+ f"{PURCHASE_MINIMUM_VALUE_SHARE:.0%} of the purchase value target."
+ )
+ if minimum * fitted_weights.sum() > target.value:
+ raise ValueError(
+ f"{target.property_type}: the purchase value target is below the "
+ "minimum transaction price."
+ )
+
+ cumulative_shares = np.cumsum(target.band_shares())
+ band_index = np.minimum(
+ np.searchsorted(cumulative_shares, price_uniforms, side="right"),
+ len(cumulative_shares) - 1,
+ )
+ draws = target.band_prices()[band_index]
+
+ def capped(scale: float) -> np.ndarray:
+ return np.minimum(stock, np.maximum(minimum, draws * scale))
+
+ def weighted_value(scale: float) -> float:
+ return float(np.dot(capped(scale), fitted_weights))
+
+ scale: float | None
+ if capacity < target.value:
+ # The stock cannot carry the value: every purchaser buys at its
+ # stock, the most the cap allows, and the receipt records the
+ # shortfall (María's ruling of 2026-10-16).
+ scale = None
+ final = stock.copy()
+ else:
+ lower, upper = 0.0, 1.0
+ while weighted_value(upper) < target.value:
+ upper *= 2.0
+ for _ in range(_BISECTION_STEPS):
+ midpoint = (lower + upper) / 2.0
+ if weighted_value(midpoint) < target.value:
+ lower = midpoint
+ else:
+ upper = midpoint
+ scale = upper
+ final = capped(upper)
+ prices = np.where(purchased, final, 0.0)
+ fitted_count = float(fitted_weights.sum())
+ at_cap = fitted & (final >= stock)
+ outside = purchased & ~sdlt_mask
+ ids = np.asarray(source_ids)
+
+ def sources(mask: np.ndarray) -> int:
+ return distinct_count(ids, mask)
+
+ # UKDS disclosure control (receipt_counts): a weighted figure one to nine
+ # source households carry is "<10", 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
+ # its own distinct sources, not as the fit's less the other side's.
+ uncapped_sources = sources(fitted & ~at_cap)
+ eligible = (stock >= minimum) & (weights > 0) & sdlt_mask
+ eligible_sources = sources(eligible)
+ # 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
+ 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
+ # 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
+ )
+ receipt: dict[str, object] = {
+ "property_type": target.property_type,
+ "target_transactions": float(target.transactions),
+ "target_value": float(target.value),
+ "fitted_transactions": small_cell_share(fitted_count, fitted_sources),
+ "fitted_value": small_cell_share(fitted_value, fitted_sources),
+ "value_fit": "scaled_band_draws" if scale is not None else "stock_cap",
+ "value_shortfall_share": small_cell_share(
+ max(0.0, 1.0 - fitted_value / target.value), fitted_sources
+ ),
+ "eligible_owner_weight": (
+ "<10"
+ if eligible_small
+ else small_cell_share(eligible_weight, eligible_sources)
+ ),
+ "event_rate": (
+ "<10"
+ 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,
+ "stock_cap_support": extreme_count(at_cap_sources),
+ "purchases_outside_sdlt_regions_weight": small_cell_share(
+ float(weights[outside].sum()), sources(outside)
+ ),
+ "outside_sdlt_regions_support": support_band(sources(outside)),
+ "purchaser_support": support_band(fitted_sources),
+ }
+ return UKPropertyPurchaseImputation(prices=prices, receipt=receipt)
+
+
+def property_purchases_operation_parameters() -> tuple[
+ tuple[str, dict[str, object]], ...
+]:
+ """The reviewed operations the manifest must carry verbatim."""
+
+ return (
+ (
+ "verify_vendored_fact_resource",
+ {
+ "artifact_role": "stamp_tax_facts",
+ "resource": PROPERTY_PURCHASES_RESOURCE,
+ "feed_pin": "chronicle_feed.json",
+ "record_sets": list(PROPERTY_PURCHASES_RECORD_SETS),
+ "source_vintage": "2024-25",
+ "mapped_build_period": PROPERTY_PURCHASES_BUILD_PERIOD,
+ "period_mapping": "published_tax_year_equals_build_period",
+ "require_before_source_read": True,
+ "runtime_sha256_required": True,
+ "fail_on_mismatch": True,
+ },
+ ),
+ (
+ PROPERTY_PURCHASES_OPERATION_KIND,
+ {
+ "outputs": list(PROPERTY_PURCHASES_OUTPUT_COLUMNS),
+ "stocks": [kind.stock for kind in PROPERTY_PURCHASE_KINDS],
+ "port_of": "uk-data#573 at 07f6b460f",
+ "minimum_price": HMRC_SDLT_MINIMUM_CONSIDERATION,
+ "eligibility": (
+ "stock at least minimum_price, the chargeable consideration "
+ "HMRC's Stamp Tax tables cover, and positive weight; at most "
+ "one purchase of each kind a year"
+ ),
+ "fit_regions": list(SDLT_REGIONS),
+ "hazard": "(max(stock, minimum) / weighted mean eligible stock) ** 1",
+ "event_score": "-log1p(-u) / hazard",
+ "threshold": (
+ "the score threshold whose weighted count of purchasers in the "
+ "fit regions is closest to the transactions target, applied "
+ "everywhere"
+ ),
+ "price": (
+ "min(stock, max(minimum, scale * band mean)), band drawn at "
+ "the band shares, scale bisected to the value target; where "
+ "the purchasers' stock cannot carry the value, every "
+ "purchaser buys at its stock and the shortfall is recorded"
+ ),
+ "minimum_value_share": PURCHASE_MINIMUM_VALUE_SHARE,
+ "weights": "spine_design_weights",
+ "streams": {
+ kind.output: {
+ "event_salt": kind.event_salt,
+ "price_salt": kind.price_salt,
+ "seed": _STREAM_SEED,
+ }
+ for kind in PROPERTY_PURCHASE_KINDS
+ },
+ "additional_residential_targets": (
+ "Table 6b HRAD transactions and value, 2024-25, times "
+ "individuals' shares of Table 8a residential transactions and "
+ "value; Table 6b bands with the five above GBP 2m combined"
+ ),
+ "non_residential_targets": (
+ "Table 8b individuals' transactions, value and bands, 2024-25"
+ ),
+ },
+ ),
+ (
+ "record_mass_conservation_receipt",
+ {
+ "entity": "household",
+ "reason": PROPERTY_PURCHASES_MASS_CHANGE_REASON,
+ "declared_factor": 1.0,
+ "gate_coupling": _MASS_GATE_COUPLING,
+ },
+ ),
+ )
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchasesResult:
+ """The frame with both purchases, and the stage's aggregate receipt."""
+
+ frame: Frame
+ receipts: tuple[dict[str, object], ...]
+ targets: UKPropertyPurchaseTargets
+
+ def evidence(self) -> dict[str, object]:
+ return {
+ "stage": PROPERTY_PURCHASES_STAGE_NAME,
+ "port_of": "uk-data#573 at 07f6b460f",
+ "kinds": [dict(receipt) for receipt in self.receipts],
+ "derivation": dict(self.targets.derivation),
+ }
+
+
+def sdlt_region_mask(regions: pd.Series) -> np.ndarray:
+ """Households where SDLT applies (England and Northern Ireland)."""
+
+ values = regions.astype(str)
+ unknown = sorted(set(values) - set(FRS_REGION_TO_COUNTRY))
+ if unknown:
+ raise ValueError(f"Property purchases met unknown FRS regions: {unknown}.")
+ return values.isin(SDLT_REGIONS).to_numpy()
+
+
+def impute_property_purchases(
+ frame: Frame, *, targets: UKPropertyPurchaseTargets
+) -> UKPropertyPurchasesResult:
+ """Add both annual purchases at the frame's household weights."""
+
+ validate_uk_national_frame(frame)
+ # Compared as the label the frame carries, so that a "2024-25" or a later
+ # year is refused by this message, not by a failed int().
+ period = uk_time_period(frame)
+ if period != str(PROPERTY_PURCHASES_BUILD_PERIOD):
+ raise ValueError(
+ "The 2024-25 Stamp Tax facts are mapped to build period "
+ f"{PROPERTY_PURCHASES_BUILD_PERIOD}, but the frame's period is {period!r}."
+ )
+ household = frame.table("household").copy()
+ for kind in PROPERTY_PURCHASE_KINDS:
+ if kind.output in household.columns:
+ raise ValueError(
+ f"{kind.output!r} is already stored: this stage is its only writer."
+ )
+ if kind.stock not in household.columns:
+ raise ValueError(f"Property purchases need the stock {kind.stock!r}.")
+ weights = frame.weights_for("household")
+ weight_values = np.asarray(weights.values, dtype=float)
+ regions = household["region"].astype(str)
+ sdlt_mask = sdlt_region_mask(regions)
+ source_ids = source_household_ids(household, stage="The property purchases stage")
+ ids = household["household_id"].to_numpy()
+ receipts = []
+ for kind in PROPERTY_PURCHASE_KINDS:
+ target = targets.for_kind(kind.name)
+ if target is None:
+ household[kind.output] = 0.0
+ receipts.append({"property_type": kind.name, "imputed": False})
+ continue
+ stock = pd.to_numeric(household[kind.stock], errors="raise").to_numpy(
+ dtype=float
+ )
+ event_uniforms, price_uniforms = property_purchase_uniforms(ids, kind)
+ imputation = impute_property_purchase_prices(
+ stock=stock,
+ weights=weight_values,
+ sdlt_mask=sdlt_mask,
+ event_uniforms=event_uniforms,
+ price_uniforms=price_uniforms,
+ target=target,
+ source_ids=source_ids,
+ )
+ household[kind.output] = imputation.prices
+ receipts.append(imputation.receipt)
+ mass = MassChangeRecord(
+ entity="household",
+ old_total=weights.total,
+ new_total=weights.total,
+ declared_factor=1.0,
+ reason=PROPERTY_PURCHASES_MASS_CHANGE_REASON,
+ )
+ result = uk_national_frame(
+ person=frame.table("person").copy(),
+ benunit=frame.table("benunit").copy(),
+ household=household,
+ time_period=uk_time_period(frame),
+ weight_kind=uk_household_weight_kind(frame),
+ household_weights=weights.values,
+ mass_log=(*frame.mass_log, mass),
+ )
+ validate_uk_national_frame(result)
+ return UKPropertyPurchasesResult(
+ frame=result, receipts=tuple(receipts), targets=targets
+ )
+
+
+def _assert_stage_parameters(stage: SourceStageSpec) -> None:
+ """Bind the manifest to the reviewed code constants (closed world)."""
+
+ _assert_closed_world_operations(stage, property_purchases_operation_parameters())
+ if stage.stage != PROPERTY_PURCHASES_STAGE_NAME:
+ raise ValueError(
+ f"Expected stage {PROPERTY_PURCHASES_STAGE_NAME!r}, got {stage.stage!r}."
+ )
+ if tuple(stage.outputs) != PROPERTY_PURCHASES_OUTPUT_COLUMNS or tuple(
+ stage.rewrites
+ ):
+ raise ValueError(
+ "The property purchases stage writes exactly "
+ f"{PROPERTY_PURCHASES_OUTPUT_COLUMNS} and rewrites nothing."
+ )
+ if stage.grain != "household":
+ raise ValueError(
+ f"The property purchases stage is household grain, got {stage.grain!r}."
+ )
+
+
+@dataclass(frozen=True)
+class UKPropertyPurchasesStageTransform:
+ """Whole-stage callable for the annual property purchases."""
+
+ stage: SourceStageSpec
+ #: The targets; read from the vendored HMRC facts when not given (the
+ #: synthetic parity fixture sizes its own to its frame).
+ targets: UKPropertyPurchaseTargets | None = field(default=None, repr=False)
+ last_result: UKPropertyPurchasesResult | None = field(default=None, init=False)
+
+ def __post_init__(self) -> None:
+ _assert_stage_parameters(self.stage)
+
+ def __call__(self, frame: Frame) -> Frame:
+ _assert_stage_parameters(self.stage)
+ targets = (
+ self.targets
+ if self.targets is not None
+ else load_property_purchase_targets()
+ )
+ result = impute_property_purchases(frame, targets=targets)
+ object.__setattr__(self, "last_result", result)
+ return result.frame
+
+ @staticmethod
+ def output_columns() -> tuple[str, ...]:
+ return PROPERTY_PURCHASES_OUTPUT_COLUMNS
+
+ def checkpoint_metadata(self) -> dict[str, object]:
+ if self.last_result is None:
+ raise RuntimeError("checkpoint metadata requires a completed stage run.")
+ return {"evidence": self.last_result.evidence()}
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 887680a32..934481ed1 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
@@ -22,6 +22,42 @@
from __future__ import annotations
import math
+from typing import Any
+
+import numpy as np
+
+#: 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"
+
+
+def source_household_ids(household: Any, *, stage: str) -> np.ndarray:
+ """Every household row's source household, for a receipt's support counts.
+
+ A table without the column is refused, and so is one with a null in it: a
+ null drops out of a distinct count or counts as one source, so a cell
+ would read fewer sources than it rests on.
+ """
+
+ if SOURCE_HOUSEHOLD_COLUMN not in household.columns:
+ raise ValueError(
+ f"{stage} counts support by {SOURCE_HOUSEHOLD_COLUMN!r}, which the "
+ "frame does not carry."
+ )
+ ids = household[SOURCE_HOUSEHOLD_COLUMN]
+ if ids.isna().any():
+ raise ValueError(
+ f"{stage} counts support by {SOURCE_HOUSEHOLD_COLUMN!r}, which is null "
+ "on some rows: every row needs its source household."
+ )
+ return ids.to_numpy()
+
+
+def distinct_count(source_ids: np.ndarray, mask: np.ndarray) -> int:
+ """The distinct source households behind a cell."""
+
+ selected = np.asarray(source_ids)[np.asarray(mask, dtype=bool)]
+ return int(len(np.unique(selected)))
def rounded_count(count: int) -> int | str:
@@ -68,6 +104,26 @@ def extreme_count(count: int) -> int | str:
return (value + 50) // 100 * 100
+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.
+ """
+
+ value = int(count)
+ if value < 0:
+ raise ValueError(f"a record count cannot be negative: {value}.")
+ if value == 0:
+ return 0
+ if value < 10:
+ return "<10"
+ if value < 30:
+ return "10-29"
+ return "30+"
+
+
def floored_share(share: float) -> float:
"""An unweighted share of records, floored to two decimals.
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/regional_home_values.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/regional_home_values.py
new file mode 100644
index 000000000..c851308cd
--- /dev/null
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/regional_home_values.py
@@ -0,0 +1,324 @@
+"""Home values from the region's Land Registry distribution, on the spine
+(microcosm#1112, microcosm#1095).
+
+The dense line reads each England-and-Wales owner clone's home value off its
+assigned constituency's uprated latest-sale distribution once it has an area
+(``uk.full.property.value``, microcosm#1240). The national line solves the
+bound spine, which has no area, so its ``main_residence_value`` stayed the
+WAS-imputed value after the regional uprating, not a Land Registry value.
+
+This stage, after the high-value home support copies, gives every
+England-and-Wales owner household with a value the one its region's
+distribution holds at the household's weighted mid-rank among the owner
+households of its FRS region, at the spine's weights, with the same ranking
+the dense node uses (``property_localisation.owner_uniforms``: ties broken by
+an identity-keyed draw, support copies spread over the top stratum by their
+own draws). The region knots are the dense node's resource's region level
+(``uk/high_value_home_value_knots.json``), from the same owner-weighted
+dwelling table as the seats. ``property_wealth`` moves by the value's change.
+Scotland, Northern Ireland, renters and owners without a value keep theirs,
+and the council-tax band is untouched (the national band is the FRS's).
+
+The value it replaces is kept in ``main_residence_value_rank_basis``, which the
+dense node ranks on, so the dense line's values, wealth and bands do not
+change; the release boundary drops the column on both lines.
+"""
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from dataclasses import dataclass, field
+from importlib.resources import files
+
+import numpy as np
+
+from microcosm.build.source_manifest import SourceStageSpec
+from microcosm.build.uk_runtime.cgt_structure import _assert_closed_world_operations
+from microcosm.build.uk_runtime.household_lineage import HIGH_VALUE_SUPPORT_COPY_COLUMN
+from microcosm.build.uk_runtime.national_frame import (
+ uk_household_weight_kind,
+ uk_national_frame,
+ uk_time_period,
+ validate_uk_national_frame,
+)
+from microcosm.build.uk_runtime.property_localisation import (
+ RANK_BASIS_COLUMN,
+ SUPPORT_STRATUM_LOWER,
+ ValueKnots,
+ load_value_knots,
+ main_residence_rank_basis,
+ owner_mask,
+ owner_uniforms,
+)
+from microcosm.build.uk_runtime.receipt_counts import (
+ distinct_count,
+ rounded_count,
+ source_household_ids,
+ support_band,
+)
+from microcosm.build.uk_runtime.rowwise_geography import FRS_REGION_TO_REGION_CODE
+from microcosm.frame import Frame, MassChangeRecord
+
+__all__ = [
+ "FRS_REGION_TO_KNOTS_REGION",
+ "RANK_BASIS_COLUMN",
+ "REGIONAL_HOME_VALUES_OPERATION_KIND",
+ "REGIONAL_HOME_VALUES_STAGE_NAME",
+ "REGIONAL_HOME_VALUES_STREAM",
+ "UKRegionalHomeValuesResult",
+ "UKRegionalHomeValuesStageTransform",
+ "assign_regional_home_values",
+ "main_residence_rank_basis",
+ "regional_home_values_operation_parameters",
+]
+
+REGIONAL_HOME_VALUES_STAGE_NAME = "regional_home_values"
+REGIONAL_HOME_VALUES_OPERATION_KIND = "assign_regional_home_values"
+KNOTS_RESOURCE = "high_value_home_value_knots.json"
+#: The stage's own keyed stream, apart from the dense node's.
+REGIONAL_HOME_VALUES_STREAM = (
+ "sha256-u53-v1",
+ "uk-spine-regional-home-values-v1",
+ 0,
+ 0,
+)
+#: The knots' region codes for the FRS regions they cover. Wales is the
+#: country code the knots use, not the placeholder region code the area
+#: assignment keeps for it (``W99999999``).
+FRS_REGION_TO_KNOTS_REGION: Mapping[str, str] = {
+ **{
+ region: code
+ for region, code in FRS_REGION_TO_REGION_CODE.items()
+ if code.startswith("E12")
+ },
+ "WALES": "W92000004",
+}
+REGIONAL_HOME_VALUES_MASS_CHANGE_REASON = (
+ "Regional home values assigned on the source spine: household weights pass "
+ "through unchanged and total household mass is conserved."
+)
+_MASS_GATE_COUPLING = (
+ "The terminal family gate requires a valid mass-conserving MassChangeRecord "
+ "carrying exactly this stage-specific reason."
+)
+
+
+def load_region_knots(knots: bytes | None = None) -> tuple[ValueKnots, dict]:
+ """The packaged knots and their region level, checked like the seats'."""
+
+ import json
+
+ payload = (
+ knots
+ if knots is not None
+ else files("microcosm.build.uk").joinpath(KNOTS_RESOURCE).read_bytes()
+ )
+ parsed = load_value_knots(payload)
+ data = json.loads(payload.decode("utf-8"))
+ regions = (data.get("levels") or {}).get("region") or {}
+ quantiles: dict[str, np.ndarray] = {}
+ for code in sorted(set(FRS_REGION_TO_KNOTS_REGION.values())):
+ if code not in regions:
+ raise ValueError(f"The value knots carry no region {code}.")
+ values = np.asarray(regions[code]["quantiles"], dtype=float)
+ if values.shape != parsed.grid.shape:
+ raise ValueError(f"Region {code} knots do not match the grid.")
+ if (
+ np.any(~np.isfinite(values))
+ or values[0] <= 0
+ or np.any(values > parsed.cap)
+ or np.any(np.diff(values) <= 0)
+ ):
+ raise ValueError(
+ f"Region {code} knots must be positive, below the cap and "
+ "strictly increasing, so a positive value stays positive and "
+ "the dense node's ranks do not tie anew."
+ )
+ quantiles[code] = values
+ return parsed, quantiles
+
+
+@dataclass(frozen=True)
+class UKRegionalHomeValuesResult:
+ """The frame with the regional values, and the stage's aggregate receipt."""
+
+ frame: Frame
+ receipt: dict[str, object]
+
+ def evidence(self) -> dict[str, object]:
+ return {"stage": REGIONAL_HOME_VALUES_STAGE_NAME, **self.receipt}
+
+
+def assign_regional_home_values(
+ frame: Frame, *, knots: bytes | None = None
+) -> UKRegionalHomeValuesResult:
+ """Read England-and-Wales owners' values off their region's knots."""
+
+ validate_uk_national_frame(frame)
+ household = frame.table("household").copy()
+ if RANK_BASIS_COLUMN in household.columns:
+ raise ValueError(
+ f"{RANK_BASIS_COLUMN!r} is already stored: this stage is its only writer."
+ )
+ for column in ("region", "tenure_type", "main_residence_value", "property_wealth"):
+ if column not in household.columns:
+ raise ValueError(f"Regional home values need {column!r}.")
+ # The graph node declares the lineage, since the executor hands a stage
+ # only its declared cells.
+ source_ids = source_household_ids(household, stage="The regional home values stage")
+ parsed, region_knots = load_region_knots(knots)
+ weights = np.asarray(frame.weights_for("household").values, dtype=float)
+ region = household["region"].astype(str).to_numpy()
+ tenure = household["tenure_type"].to_numpy()
+ value = household["main_residence_value"].to_numpy(dtype=float)
+ wealth = household["property_wealth"].to_numpy(dtype=float)
+ support = (
+ household[HIGH_VALUE_SUPPORT_COPY_COLUMN].to_numpy().astype(bool)
+ if HIGH_VALUE_SUPPORT_COPY_COLUMN in household
+ else None
+ )
+ u, uniform_receipt = owner_uniforms(
+ spine_key=household["household_id"].astype(str).to_numpy(dtype=object),
+ region=region,
+ tenure_type=tenure,
+ value=value,
+ weight=weights,
+ stream=REGIONAL_HOME_VALUES_STREAM,
+ support_copy=support,
+ support_stratum_lower=SUPPORT_STRATUM_LOWER,
+ )
+ knots_region = np.asarray(
+ [FRS_REGION_TO_KNOTS_REGION.get(code, "") for code in region], dtype=object
+ )
+ target = owner_mask(tenure) & (value > 0) & (knots_region != "")
+ new_value = value.copy()
+ rewritten_by_region: dict[str, int | str] = {}
+ for code in sorted(set(knots_region[target])):
+ rows = np.flatnonzero(target & (knots_region == code))
+ new_value[rows] = np.interp(u[rows], parsed.grid, region_knots[code])
+ rewritten_by_region[str(code)] = rounded_count(int(len(rows)))
+ if np.any(~np.isfinite(new_value)) or np.any(new_value[target] <= 0):
+ raise ValueError("Regional home values must be finite and positive.")
+ new_wealth = np.maximum(wealth + (new_value - value), 0.0)
+ household[RANK_BASIS_COLUMN] = value
+ household["main_residence_value"] = new_value
+ household["property_wealth"] = new_wealth
+ household_weights = frame.weights_for("household")
+ mass = MassChangeRecord(
+ entity="household",
+ old_total=household_weights.total,
+ new_total=household_weights.total,
+ declared_factor=1.0,
+ reason=REGIONAL_HOME_VALUES_MASS_CHANGE_REASON,
+ )
+ result = uk_national_frame(
+ person=frame.table("person").copy(),
+ benunit=frame.table("benunit").copy(),
+ household=household,
+ time_period=uk_time_period(frame),
+ weight_kind=uk_household_weight_kind(frame),
+ household_weights=household_weights.values,
+ mass_log=(*frame.mass_log, mass),
+ )
+ validate_uk_national_frame(result)
+ at_cap = distinct_count(source_ids, target & (new_value >= parsed.cap))
+ receipt = {
+ "knots_basis_year": parsed.basis_year,
+ "knots_inputs_sha256": parsed.inputs_sha256,
+ "rows": rounded_count(int(len(household))),
+ "rows_rewritten_by_region": rewritten_by_region,
+ "sources_at_cap": support_band(at_cap),
+ "weighted_value_before": float(np.dot(value[target], weights[target])),
+ "weighted_value_after": float(np.dot(new_value[target], weights[target])),
+ "ranking": {
+ key: uniform_receipt[key] for key in ("rank_basis", "support_stratum_lower")
+ },
+ }
+ return UKRegionalHomeValuesResult(frame=result, receipt=receipt)
+
+
+def regional_home_values_operation_parameters() -> tuple[
+ tuple[str, dict[str, object]], ...
+]:
+ """The reviewed operations the manifest must carry verbatim."""
+
+ return (
+ (
+ REGIONAL_HOME_VALUES_OPERATION_KIND,
+ {
+ "knots": KNOTS_RESOURCE,
+ "knots_level": "region",
+ "region_map": dict(sorted(FRS_REGION_TO_KNOTS_REGION.items())),
+ "rows": (
+ "owner households (tenure owned outright or with a mortgage) "
+ "with main_residence_value > 0 in the mapped regions"
+ ),
+ "rank": (
+ "weighted mid-rank of main_residence_value among the owner "
+ "households of the FRS region at the spine's weights, ties "
+ "broken by a keyed draw; high-value support copies take "
+ "support_stratum_lower + (1 - support_stratum_lower) * draw"
+ ),
+ "support_stratum_lower": SUPPORT_STRATUM_LOWER,
+ "stream": list(REGIONAL_HOME_VALUES_STREAM),
+ "value": "np.interp(rank, grid, region knots)",
+ "property_wealth": "moves by the value's change, floored at 0",
+ "rank_basis_column": RANK_BASIS_COLUMN,
+ },
+ ),
+ (
+ "record_mass_conservation_receipt",
+ {
+ "entity": "household",
+ "reason": REGIONAL_HOME_VALUES_MASS_CHANGE_REASON,
+ "declared_factor": 1.0,
+ "gate_coupling": _MASS_GATE_COUPLING,
+ },
+ ),
+ )
+
+
+def _assert_stage_parameters(stage: SourceStageSpec) -> None:
+ _assert_closed_world_operations(stage, regional_home_values_operation_parameters())
+ if stage.stage != REGIONAL_HOME_VALUES_STAGE_NAME:
+ raise ValueError(
+ f"Expected stage {REGIONAL_HOME_VALUES_STAGE_NAME!r}, got {stage.stage!r}."
+ )
+ if tuple(stage.outputs) != (RANK_BASIS_COLUMN,) or tuple(stage.rewrites) != (
+ "main_residence_value",
+ "property_wealth",
+ ):
+ raise ValueError(
+ "The regional home values stage writes the rank basis and rewrites "
+ "main_residence_value and property_wealth only."
+ )
+ if stage.grain != "household":
+ raise ValueError(
+ f"The regional home values stage is household grain, got {stage.grain!r}."
+ )
+
+
+@dataclass(frozen=True)
+class UKRegionalHomeValuesStageTransform:
+ """Whole-stage callable for the regional home values."""
+
+ stage: SourceStageSpec
+ last_result: UKRegionalHomeValuesResult | None = field(default=None, init=False)
+
+ def __post_init__(self) -> None:
+ _assert_stage_parameters(self.stage)
+
+ def __call__(self, frame: Frame) -> Frame:
+ _assert_stage_parameters(self.stage)
+ result = assign_regional_home_values(frame)
+ object.__setattr__(self, "last_result", result)
+ return result.frame
+
+ @staticmethod
+ def output_columns() -> tuple[str, ...]:
+ return (RANK_BASIS_COLUMN,)
+
+ def checkpoint_metadata(self) -> dict[str, object]:
+ if self.last_result is None:
+ raise RuntimeError("checkpoint metadata requires a completed stage run.")
+ return {"evidence": self.last_result.evidence()}
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 28db5c791..7bece76f0 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
@@ -319,8 +319,15 @@ def run_uk_release_cut_battery(
the compile's unsupported references by period (empty where every
reference resolved): the compile-parity gates need them to tell a
reference that did not resolve from a fixture row with no counterpart.
+ The battery refuses to run on a policyengine-uk other than the pinned one
+ (microcosm#1095), since its coverage engine is the installed one.
"""
+ from microcosm.build.uk_runtime.hmrc_uprating import (
+ assert_installed_engine_is_pinned,
+ )
+
+ assert_installed_engine_is_pinned()
battery = GateBatteryRun(
uk_national_gate_manifest(),
release_id=release_id,
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 3d2d18e84..58f831c78 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
@@ -134,6 +134,9 @@
from microcosm.build.uk_runtime.lcfs_consumption import (
UKLCFSConsumptionStageTransform,
)
+from microcosm.build.uk_runtime.legacy_closure_take_up import (
+ UKLegacyClosureTakeUpStageTransform,
+)
from microcosm.build.uk_runtime.national_frame import (
uk_household_weight_kind,
write_uk_national_frame,
@@ -156,6 +159,12 @@
from microcosm.build.uk_runtime.property_components import (
UKPropertyComponentsStageTransform,
)
+from microcosm.build.uk_runtime.property_purchases import (
+ UKPropertyPurchasesStageTransform,
+)
+from microcosm.build.uk_runtime.regional_home_values import (
+ UKRegionalHomeValuesStageTransform,
+)
from microcosm.build.uk_runtime.regional_uprating import (
UKRegionalPropertyUpratingStageTransform,
)
@@ -694,6 +703,11 @@ def _rules_engine() -> PolicyEngineUKEngine:
"build_uk_frs_spine requires the microcosm-build 'uk' extra "
"(policyengine-uk). Run: uv sync --all-packages --extra uk"
) from exc
+ from microcosm.build.uk_runtime.hmrc_uprating import (
+ assert_installed_engine_is_pinned,
+ )
+
+ assert_installed_engine_is_pinned()
return PolicyEngineUKEngine()
@@ -1628,6 +1642,14 @@ def prepare_uk_spine_execution(
spi_tab_path=sources["spi"],
)
)
+ if "regional_home_values" in stage_names:
+ implementations["regional_home_values"] = UKRegionalHomeValuesStageTransform(
+ stage=stages_by_name["regional_home_values"],
+ )
+ if "property_purchases" in stage_names:
+ implementations["property_purchases"] = UKPropertyPurchasesStageTransform(
+ stage=stages_by_name["property_purchases"],
+ )
if "lcfs_consumption" in stage_names:
implementations["lcfs_consumption"] = _GraphSourceTransform(
lambda sources: UKLCFSConsumptionStageTransform(
@@ -1690,6 +1712,12 @@ def prepare_uk_spine_execution(
implementations["uc_capital_coherence"] = UKUCCapitalCoherenceStageTransform(
stage=stages_by_name["uc_capital_coherence"]
)
+ if "uc_legacy_closure_take_up" in stage_names:
+ implementations["uc_legacy_closure_take_up"] = (
+ UKLegacyClosureTakeUpStageTransform(
+ stage=stages_by_name["uc_legacy_closure_take_up"]
+ )
+ )
if "pension_credit_take_up" in stage_names:
implementations["pension_credit_take_up"] = UKPensionCreditTakeUpStageTransform(
stage=stages_by_name["pension_credit_take_up"],
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 09c09006d..a5542a61a 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
@@ -172,7 +172,9 @@ def __post_init__(self) -> None:
"benunit.uc_deduction_type_random_draw",
"benunit.uc_latent_deduction_rate",
"benunit.uc_reported_capital",
+ "benunit.would_claim_uc_at_legacy_closure",
"benunit.would_claim_uc_childcare",
+ "household.additional_residential_property_purchased",
"household.atomic_area_basis",
"household.atomic_area_code",
"household.atomic_area_system",
@@ -238,6 +240,7 @@ def __post_init__(self) -> None:
"household.lsoa_code",
"household.mortgage_debt",
"household.msoa_code",
+ "household.non_residential_property_purchased",
"household.num_vehicles",
"household.oa_code",
"household.ons_household_type",
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 19fe70ab6..68668a957 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
@@ -74,7 +74,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.132.6 counts these household property values as Universal
+#: policyengine-uk 2.134.4 counts these household property values as Universal
#: Credit and Pension Credit capital (the ``sources`` lists under
#: ``gov.dwp.universal_credit.means_test.capital`` and
#: ``gov.dwp.pension_credit.income.capital``, beside ``savings`` and
diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/uprating_holds.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/uprating_holds.py
index d697d90ad..a9c713c19 100644
--- a/packages/microcosm-build/src/microcosm/build/uk_runtime/uprating_holds.py
+++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/uprating_holds.py
@@ -53,6 +53,7 @@
(
"calendar_year_average",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
MONTHLY_WINDOW_COUNT_X_MEAN,
*MONTHLY_WINDOW_OPERATIONS,
)
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 4d245d73b..fb9c1522b 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 = (
- "70663b9ce72b956b9b5473cc55fe76b31bb3c10be3dc5ce94bb7f44ae8ef4e69"
+ "e5d5818bdc73fd44fbb474b6f0bca4b697ee2f70a0cbb9e47eb04b20f7408d77"
)
LEGACY_CAMPAIGN_UV_LOCK_SHA256 = (
"27f47e385cfa35e2644a37410d1804b361ad9aee123577551c8421547bda65ee"
diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_cgt_observation_period.py b/packages/microcosm-build/tests/engine/uk/test_uk_cgt_observation_period.py
index ccdbf81c4..d4b17e978 100644
--- a/packages/microcosm-build/tests/engine/uk/test_uk_cgt_observation_period.py
+++ b/packages/microcosm-build/tests/engine/uk/test_uk_cgt_observation_period.py
@@ -123,6 +123,12 @@ def test_derived_cgt_taxable_income_is_the_income_the_engine_stacks_gains_on():
"gov.hmrc.income_tax.rates.uk[2].threshold": {
"2020-01-01.2030-12-31": 2_000_000
},
+ # The reform only measures; from policyengine-uk 2.134.0 a
+ # retention-rate elasticity of 1 is the default realisation
+ # response (pe-uk#2419), which would move the gains it inverts.
+ "gov.simulation.capital_gains_responses.elasticity": {
+ "2020-01-01.2030-12-31": 0
+ },
},
)
parameters = simulation.tax_benefit_system.parameters(f"{year}-01-01").gov.hmrc
diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_frs_stochastic.py b/packages/microcosm-build/tests/engine/uk/test_uk_frs_stochastic.py
index 1ea7dd218..8624b322b 100644
--- a/packages/microcosm-build/tests/engine/uk/test_uk_frs_stochastic.py
+++ b/packages/microcosm-build/tests/engine/uk/test_uk_frs_stochastic.py
@@ -77,8 +77,9 @@ def test_uc_take_up_population_mirrors_the_engines_eligibility_rule() -> None:
# Named exception (iv): from 2.128.0 the closure of tax credits moves a
# family onto Universal Credit (pe-uk#2119), and a pension-age Working Tax
# Credit recipient claims it with the upper age condition waived (SI
- # 2014/1230 reg 60A). The population leaves them out; the build leaves
- # would_claim_uc_at_legacy_closure at the engine's default.
+ # 2014/1230 reg 60A). The population leaves them out; whether such a
+ # family claims at the closure is would_claim_uc_at_legacy_closure, which
+ # uc_legacy_closure_take_up draws at DWP's Move to UC rates (microcosm#1095).
assert _engine_uc_eligible(
{"wtc": {"age": {2025: 70}, "working_tax_credit_reported": {2025: 2_000}}},
{"b_wtc": {"members": ["wtc"]}},
diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_hmrc_uprating_engine_pins.py b/packages/microcosm-build/tests/engine/uk/test_uk_hmrc_uprating_engine_pins.py
index 66e056666..af7e07bdd 100644
--- a/packages/microcosm-build/tests/engine/uk/test_uk_hmrc_uprating_engine_pins.py
+++ b/packages/microcosm-build/tests/engine/uk/test_uk_hmrc_uprating_engine_pins.py
@@ -13,3 +13,9 @@ def test_the_vendored_pins_match_the_installed_engine() -> None:
path,
instant,
)
+
+
+def test_the_locked_install_passes_the_freeze() -> None:
+ # The lock's own install: its version, the files policyengine_uk imports
+ # from and their RECORD agree with the pin.
+ assert hu.assert_installed_engine_is_pinned() == hu.pinned_engine_version()
diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_release_input_coverage.py b/packages/microcosm-build/tests/engine/uk/test_uk_release_input_coverage.py
index 9c89a561d..514bf5087 100644
--- a/packages/microcosm-build/tests/engine/uk/test_uk_release_input_coverage.py
+++ b/packages/microcosm-build/tests/engine/uk/test_uk_release_input_coverage.py
@@ -468,7 +468,9 @@ def test_shipped_manifest_is_current(self) -> None:
"was_lisa",
"regional_property_uprating",
"high_value_home_support",
+ "regional_home_values",
"property_components",
+ "property_purchases",
"nts_bus_travel",
"lcfs_consumption",
"etb_vat",
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 4c28e72c2..9ecbb2a6d 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
@@ -932,6 +932,8 @@ def test_spi_spine_adds_no_country_package_resources(self) -> None:
"hmrc_cgt_conditioning_facts.json",
"hmrc_cgt_asset_type_facts.json",
"hmrc_property_rental_income_facts.json",
+ "hmrc_stamp_tax_facts.json",
+ "dwp_move_to_uc_facts.json",
"obr_hvcts_costing_facts.json",
"hmrc_itl_taxpayer_counts.json",
"hmrc_uprating_engine_pins.json",
@@ -1028,8 +1030,11 @@ def test_uk_source_manifest_contains_only_canonical_spine_stages(self) -> None:
# retired (#901).
# microcosm#1063 also adds cgt_residential_split after the anchor, and
# microcosm#1106 property_components after the regional uprating;
- # microcosm#1240 high_value_home_support between them.
- assert len(spec.sources.stages) == 42
+ # microcosm#1240 high_value_home_support between them, microcosm#1112
+ # regional_home_values after it, and microcosm#1095 property_purchases
+ # after property_components and uc_legacy_closure_take_up after
+ # uc_capital_coherence.
+ assert len(spec.sources.stages) == 45
assert not {"frs_hmrc_retained_leaves", "hmrc_spi_income"}.intersection(
stage.stage for stage in spec.sources.stages
)
@@ -1071,6 +1076,8 @@ def test_uk_package_loads(self) -> None:
"hmrc_cgt_conditioning_facts.json",
"hmrc_cgt_asset_type_facts.json",
"hmrc_property_rental_income_facts.json",
+ "hmrc_stamp_tax_facts.json",
+ "dwp_move_to_uc_facts.json",
"obr_hvcts_costing_facts.json",
"hmrc_itl_taxpayer_counts.json",
"hmrc_uprating_engine_pins.json",
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 370c040d8..d5af44b78 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.132.6",
+ "policyengine-uk": "2.134.4",
}
ENGINE_PACKAGES = ("microcosm-build", "microcosm-data", "microcosm-frame")
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 40cc32918..59fe6e224 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
@@ -5418,3 +5418,284 @@ def test__given_a_summed_cell_changes_record_set_mid_window__then_it_refuses():
rows[0]["layout"]["record_set_id"] = "cms_medicaid.Other.month2025-04"
with pytest.raises(ValueError, match="multiple semantic series"):
compile_ledger_target_references(rows, [_sum_window_reference()], country="us")
+
+
+def _window_ratio_facts(
+ *, numerator: float = 60.0, denominator: float = 80.0
+) -> list[dict]:
+ facts = [
+ _cy_window_fact(key="fy2024", value=304.0, opening_year=2024),
+ _cy_window_fact(key="fy2025", value=329.0, opening_year=2025),
+ _cy_window_fact(key="fy2026", value=347.0, opening_year=2026),
+ ]
+ for key, measure_id, value in (
+ ("individuals", "individuals_receipts", numerator),
+ ("all-buyers", "all_buyers_receipts", denominator),
+ ):
+ operand = _cy_window_fact(
+ key=key,
+ value=value,
+ opening_year=2024,
+ measure_id=measure_id,
+ assertion="observation",
+ )
+ # Another publisher's universe: the operand's entity is its own.
+ operand["entity"] = {"name": "return", "role": "sdlt_land_transaction"}
+ facts.append(operand)
+ return facts
+
+
+def _window_ratio_reference(**overrides) -> LedgerTargetReference:
+ values = {
+ "name": "households' SDLT, calendar 2025",
+ "ledger_selector": {
+ "source_name": "irs_soi",
+ "source_measure_id": "total_tax_amount",
+ "geography_level": "country",
+ "geography_id": "0100000US",
+ },
+ "value_operation": "calendar_year_window_scaled_by_ratio",
+ "value_operands": (
+ {"role": "base"},
+ {
+ "role": "numerator",
+ "source_measure_id": "individuals_receipts",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ {
+ "role": "denominator",
+ "source_measure_id": "all_buyers_receipts",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ ),
+ "assertion_policy": "allow_source_projection",
+ "entity": "household",
+ "measure": "obr/sdlt_households",
+ "family": "obr",
+ "period": 2025,
+ }
+ values.update(overrides)
+ return LedgerTargetReference(**values)
+
+
+def test__given_a_window_and_a_pinned_quotient__then_the_window_is_translated() -> None:
+ # The OBR's calendar-2025 window of a fiscal-year line, restated for the
+ # subset HMRC's own year publishes the share of (microcosm#1095).
+ registry = compile_ledger_target_references(
+ _window_ratio_facts(), [_window_ratio_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)
+ metadata = spec.metadata
+ assert metadata["ledger_value_formula"] == (
+ "(3/12 * FY2024 + 9/12 * FY2025) * numerator / denominator"
+ )
+ assert metadata["ledger_value_base"] == repr(window)
+ assert metadata["ledger_value_ratio"] == repr(60.0 / 80.0)
+ members = json.loads(metadata["ledger_calendar_year_window_members"])
+ assert set(members) == {"2024", "2025"}
+ # The window's latest year carries the identity; the operands only
+ # translate it.
+ assert metadata["ledger_aggregate_fact_key"] == "ledger.aggregate_fact.v2:fy2025"
+
+
+def test__given_a_window_ratio__then_operand_selectors_are_complete_as_declared() -> (
+ None
+):
+ selectors = reference_fact_selectors(_window_ratio_reference())
+
+ assert selectors[1:] == (
+ {
+ "source_measure_id": "individuals_receipts",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ {
+ "source_measure_id": "all_buyers_receipts",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ )
+
+
+def test__given_a_window_ratio_outside_a_subset_share__then_it_refuses() -> None:
+ with pytest.raises(ValueError, match=r"ratio must lie in \(0, 1\]"):
+ compile_ledger_target_references(
+ _window_ratio_facts(numerator=90.0),
+ [_window_ratio_reference()],
+ country="uk",
+ )
+
+
+def test__given_a_window_ratio_operand_matching_two_facts__then_it_refuses() -> None:
+ facts = _window_ratio_facts()
+ duplicate = dict(facts[-1])
+ duplicate["aggregate_fact_key"] = "ledger.aggregate_fact.v2:all-buyers-copy"
+ duplicate["semantic_fact_key"] = "ledger.semantic_fact.v2:all-buyers-copy"
+ facts.append(duplicate)
+ with pytest.raises(ValueError, match="matched 2 facts; expected exactly 1"):
+ compile_ledger_target_references(
+ facts, [_window_ratio_reference()], country="uk"
+ )
+
+
+@pytest.mark.parametrize(
+ ("operands", "message"),
+ [
+ (
+ ({"role": "base"}, {"role": "numerator", "source_measure_id": "x"}),
+ "ordered base/numerator/denominator",
+ ),
+ (
+ (
+ {"role": "base", "source_measure_id": "x"},
+ {"role": "numerator", "source_measure_id": "x"},
+ {"role": "denominator", "source_measure_id": "y"},
+ ),
+ "takes no overrides",
+ ),
+ (
+ (
+ {"role": "base"},
+ {"role": "numerator", "source_measure_id": "x"},
+ {
+ "role": "denominator",
+ "source_measure_id": "y",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ ),
+ "must pin its own period_type and period_value",
+ ),
+ ],
+)
+def test__given_malformed_window_ratio_operands__then_the_reference_refuses(
+ operands, message
+) -> None:
+ with pytest.raises(ValueError, match=message):
+ _window_ratio_reference(value_operands=operands)
+
+
+def test__given_window_ratio_operands_of_two_cells__then_each_sums_its_members() -> (
+ None
+):
+ # Individuals' share of SDLT receipts over both property types: each
+ # operand sums the residential and the non-residential cell.
+ facts = _window_ratio_facts()[:3]
+ for key, value in (
+ ("ind-residential", 40.0),
+ ("ind-non-residential", 20.0),
+ ("all-residential", 60.0),
+ ("all-non-residential", 20.0),
+ ):
+ operand = _cy_window_fact(
+ key=key,
+ value=value,
+ opening_year=2024,
+ measure_id="receipts",
+ assertion="observation",
+ )
+ operand["entity"] = {"name": "return", "role": "sdlt_land_transaction"}
+ facts.append(operand)
+ reference = _window_ratio_reference(
+ value_operands=(
+ {"role": "base"},
+ {
+ "role": "numerator",
+ "aggregate_fact_key": [
+ "ledger.aggregate_fact.v2:ind-residential",
+ "ledger.aggregate_fact.v2:ind-non-residential",
+ ],
+ "period_type": "tax_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ },
+ {
+ "role": "denominator",
+ "aggregate_fact_key": [
+ "ledger.aggregate_fact.v2:all-residential",
+ "ledger.aggregate_fact.v2:all-non-residential",
+ ],
+ "period_type": "tax_year",
+ "period_value": 2024,
+ "expected_member_count": 2,
+ },
+ )
+ )
+
+ spec = compile_ledger_target_references(facts, [reference], country="uk").specs[0]
+
+ assert spec.value == pytest.approx((0.25 * 304.0 + 0.75 * 329.0) * 60.0 / 80.0)
+ assert spec.metadata["ledger_value_numerator"] == "60.0"
+ assert spec.metadata["ledger_value_denominator"] == "80.0"
+
+
+def _window_ratio_member_facts() -> list[dict]:
+ facts = _window_ratio_facts()[:3]
+ for key, measure_id, value in (
+ ("ind-a", "receipts_a", 40.0),
+ ("ind-a-again", "receipts_a", 20.0),
+ ("all-a", "all_receipts", 80.0),
+ ):
+ operand = _cy_window_fact(
+ key=key,
+ value=value,
+ opening_year=2024,
+ measure_id=measure_id,
+ assertion="observation",
+ )
+ operand["entity"] = {"name": "return", "role": "sdlt_land_transaction"}
+ facts.append(operand)
+ return facts
+
+
+def _window_ratio_member_reference(numerator: dict) -> LedgerTargetReference:
+ return _window_ratio_reference(
+ value_operands=(
+ {"role": "base"},
+ {
+ "role": "numerator",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ **numerator,
+ },
+ {
+ "role": "denominator",
+ "source_measure_id": "all_receipts",
+ "period_type": "tax_year",
+ "period_value": 2024,
+ },
+ )
+ )
+
+
+def test__given_a_window_ratio_member_matched_twice__then_it_refuses() -> None:
+ # Two facts for one listed member and none for the other add up to the
+ # declared total; each member must still match exactly once.
+ reference = _window_ratio_member_reference(
+ {"source_measure_id": ["receipts_a", "receipts_b"], "expected_member_count": 2}
+ )
+ with pytest.raises(ValueError, match="matched 2 facts; expected exactly one"):
+ compile_ledger_target_references(
+ _window_ratio_member_facts(), [reference], country="uk"
+ )
+
+
+def test__given_a_window_ratio_list_unlike_its_count__then_it_refuses() -> None:
+ with pytest.raises(ValueError, match="exactly one list-valued selector"):
+ compile_ledger_target_references(
+ _window_ratio_member_facts(),
+ [
+ _window_ratio_member_reference(
+ {
+ "source_measure_id": ["receipts_a", "receipts_b", "receipts_c"],
+ "expected_member_count": 2,
+ }
+ )
+ ],
+ country="uk",
+ )
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 a19429009..f9e328f87 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
@@ -178,7 +178,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.132.6's is_uc_eligible reads the age of the unit's UC
+ policyengine-uk 2.134.4'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-build/tests/engine_free/uk/test_uk_full_build_preparation.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_build_preparation.py
index f3d303fcb..1c954f180 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_full_build_preparation.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_build_preparation.py
@@ -6,7 +6,7 @@
import pytest
from microcosm.build.uk_runtime import full_build_cli as cli
-from microcosm.build.uk_runtime import spine_build
+from microcosm.build.uk_runtime import hmrc_uprating, spine_build
from microcosm.build.uk_runtime.national_frame import (
load_uk_national_frame,
write_uk_national_frame,
@@ -39,6 +39,11 @@ def checkpoint_argv(tmp_path, toy_ladder, monkeypatch):
monkeypatch.setattr(
spine_build, "_rules_engine_provenance", lambda: {"version": "fixture"}
)
+ # The engine stands in here, so its freeze check does too: the preparation
+ # runs it before reading any input (microcosm#1095).
+ monkeypatch.setattr(
+ hmrc_uprating, "assert_installed_engine_is_pinned", lambda: "fixture"
+ )
argv = [
"--release-role",
"dense",
diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_graph.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_graph.py
index de26d16ae..28a774fb0 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_graph.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_graph.py
@@ -55,8 +55,10 @@ def test_uk_spine_graph_contains_every_manifest_stage() -> None:
# microcosm#1063 also adds cgt_residential_split after the anchor,
# microcosm#1095 the spi_benefit_coherence pass after uc_reporter_redraw,
# microcosm#1106 property_components after the regional uprating, and
- # microcosm#1240 high_value_home_support between those two.
- assert len(expected) == 42
+ # microcosm#1240 high_value_home_support between those two; microcosm#1095
+ # adds property_purchases and uc_legacy_closure_take_up, and microcosm#1112
+ # regional_home_values.
+ assert len(expected) == 45
assert {"frs_hmrc_retained_leaves", "hmrc_spi_income"}.isdisjoint(expected)
assert set(expected) <= ids
assert {"frs_hmrc_retained_leaves", "hmrc_spi_income"}.isdisjoint(ids)
diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_hmrc_uprating_engine_pins.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_hmrc_uprating_engine_pins.py
index a4a23cd17..6854455af 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_hmrc_uprating_engine_pins.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_hmrc_uprating_engine_pins.py
@@ -21,11 +21,13 @@ def refuse() -> None:
assert hu._engine_version() == pins["engine"]["version"]
assert json.loads(_PINS_PATH.read_text(encoding="utf-8")) == pins
+
def test_an_instant_outside_the_pins_is_refused_by_name() -> None:
path = hu.UK_ENGINE_INDEX_PARAMETERS[0]
with pytest.raises(ValueError, match="not in the vendored engine pins"):
hu.engine_parameter_value(path, "1999-01-01")
+
def test_a_pins_file_for_the_wrong_roster_is_refused(monkeypatch) -> None:
hu.engine_parameter_pins.cache_clear()
payload = json.loads(_PINS_PATH.read_text(encoding="utf-8"))
@@ -48,3 +50,193 @@ def joinpath(self, name: str) -> _Resource:
hu.engine_parameter_pins()
finally:
hu.engine_parameter_pins.cache_clear()
+
+
+def test_a_build_refuses_an_engine_other_than_the_pinned_one(monkeypatch) -> None:
+ import re
+
+ from microcosm.build.uk_runtime import hmrc_uprating
+
+ pinned = str(hmrc_uprating.engine_parameter_pins()["engine"]["version"])
+ # Nothing imports: the pinned metadata alone passes, and the caller's own
+ # import reports the missing module.
+ monkeypatch.setattr(hmrc_uprating, "_engine_origin", lambda: None)
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: pinned)
+ assert hmrc_uprating.assert_installed_engine_is_pinned() == pinned
+ # The freeze: a later release, and a post-release or a local build of the
+ # pinned one, are refused, since the match is exact.
+ for installed in ("9.9.9", f"{pinned}.post1", f"{pinned}+local"):
+ monkeypatch.setattr(
+ hmrc_uprating, "installed_engine_version", lambda v=installed: v
+ )
+ with pytest.raises(RuntimeError, match=re.escape(f"{installed} is installed")):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+ # Without the engine, the caller's own import reports it.
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: "absent")
+ assert hmrc_uprating.assert_installed_engine_is_pinned() == "absent"
+ # An engine that imports without distribution metadata has no version to
+ # check, so it is refused too.
+ monkeypatch.setattr(
+ hmrc_uprating,
+ "_engine_origin",
+ lambda: "/elsewhere/policyengine_uk/__init__.py",
+ )
+ with pytest.raises(RuntimeError, match="no distribution metadata"):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+
+
+def test_the_imported_engine_must_be_the_distributions_own(
+ monkeypatch, tmp_path
+) -> None:
+ from microcosm.build.uk_runtime import hmrc_uprating
+
+ pinned = str(hmrc_uprating.engine_parameter_pins()["engine"]["version"])
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: pinned)
+ own = tmp_path / "site" / "policyengine_uk" / "__init__.py"
+ own.parent.mkdir(parents=True)
+ own.write_text("RELEASE = 'pinned'\n")
+ shadow = tmp_path / "shadow" / "policyengine_uk" / "__init__.py"
+ shadow.parent.mkdir(parents=True)
+ shadow.write_text("RELEASE = 'other'\n")
+ record = hmrc_uprating._record_sha256(str(own))
+ monkeypatch.setattr(
+ hmrc_uprating, "_engine_distribution_file", lambda: (str(own), record)
+ )
+ # The distribution's own files, matching its RECORD: passes.
+ monkeypatch.setattr(hmrc_uprating, "_engine_origin", lambda: str(own))
+ assert hmrc_uprating.assert_installed_engine_is_pinned() == pinned
+ # A copy imported from elsewhere: refused.
+ monkeypatch.setattr(hmrc_uprating, "_engine_origin", lambda: str(shadow))
+ with pytest.raises(RuntimeError, match="shadowing copy"):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+ # The pinned record beside other files: refused.
+ own.write_text("RELEASE = 'other'\n")
+ monkeypatch.setattr(hmrc_uprating, "_engine_origin", lambda: str(own))
+ with pytest.raises(RuntimeError, match="RECORD"):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+
+
+def test_a_copy_earlier_on_the_path_is_found_and_refused(monkeypatch, tmp_path) -> None:
+ import sys
+ from pathlib import Path
+
+ from microcosm.build.uk_runtime import hmrc_uprating
+
+ pinned = str(hmrc_uprating.engine_parameter_pins()["engine"]["version"])
+ shadow = tmp_path / "policyengine_uk"
+ shadow.mkdir()
+ (shadow / "__init__.py").write_text("")
+ monkeypatch.syspath_prepend(str(tmp_path))
+ monkeypatch.delitem(sys.modules, "policyengine_uk", raising=False)
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: pinned)
+ origin = hmrc_uprating._engine_origin()
+ assert Path(origin).resolve() == (shadow / "__init__.py").resolve()
+ monkeypatch.setattr(
+ hmrc_uprating,
+ "_engine_distribution_file",
+ lambda: (
+ str(tmp_path / "site-packages" / "policyengine_uk" / "__init__.py"),
+ None,
+ ),
+ )
+ with pytest.raises(RuntimeError, match="shadowing copy"):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+
+
+def test_a_module_without_a_spec_is_refused_by_the_guard(monkeypatch) -> None:
+ import sys
+ import types
+
+ from microcosm.build.uk_runtime import hmrc_uprating
+
+ pinned = str(hmrc_uprating.engine_parameter_pins()["engine"]["version"])
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: pinned)
+ monkeypatch.setitem(
+ sys.modules, "policyengine_uk", types.ModuleType("policyengine_uk")
+ )
+ with pytest.raises(RuntimeError, match="without a module spec"):
+ hmrc_uprating.assert_installed_engine_is_pinned()
+
+
+def test_the_hmrc_helpers_factory_refuses_an_unpinned_engine(monkeypatch) -> None:
+ import sys
+ import types
+
+ from microcosm.build.uk_runtime import hmrc_calibration, hmrc_uprating
+
+ stub = types.ModuleType("policyengine_uk")
+ stub.Microsimulation = lambda dataset: dataset
+ monkeypatch.setitem(sys.modules, "policyengine_uk", stub)
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: "9.9.9")
+ with pytest.raises(RuntimeError, match="9.9.9 is installed"):
+ hmrc_calibration._default_simulation_factory(object())
+
+
+def test_the_build_preparations_refuse_before_reading_any_input(monkeypatch) -> None:
+ import argparse
+
+ from microcosm.build.uk_runtime import full_build_cli, hmrc_uprating
+
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: "9.9.9")
+ for prepare in (
+ full_build_cli.prepare_full_build,
+ full_build_cli.prepare_national_build,
+ ):
+ # An empty request: the guard refuses before any argument is read.
+ with pytest.raises(RuntimeError, match="9.9.9 is installed"):
+ prepare(argparse.Namespace())
+
+
+def test_a_spine_built_on_another_engine_is_refused() -> None:
+ from microcosm.build.uk_runtime import calibration_run, hmrc_uprating
+
+ check = calibration_run._assert_spine_engine_is_pinned
+ pinned = hmrc_uprating.pinned_engine_version()
+ check({"rules_engine": {"package": "policyengine-uk", "version": pinned}})
+ # A sidecar that records no engine, or a synthetic "unavailable" one, is
+ # left to the preflight's stage roster.
+ for unrecorded in ({}, {"rules_engine": {"version": "unavailable"}}):
+ check(unrecorded)
+ with pytest.raises(ValueError, match="built on policyengine-uk 9.9.9"):
+ check({"rules_engine": {"package": "policyengine-uk", "version": "9.9.9"}})
+
+
+def test_the_build_and_the_certifier_refuse_an_unpinned_engine(monkeypatch) -> None:
+ import sys
+ import types
+ from datetime import date
+ from pathlib import Path
+
+ from microcosm.build.uk_runtime import hmrc_uprating, spine_build
+ from microcosm.build.uk_runtime.release_certification import (
+ run_uk_release_cut_battery,
+ )
+
+ # The import check passes (a stand-in where the tier carries no engine);
+ # the installed version is a later release.
+ monkeypatch.setitem(
+ sys.modules, "policyengine_uk", types.ModuleType("policyengine_uk")
+ )
+ monkeypatch.setattr(hmrc_uprating, "installed_engine_version", lambda: "9.9.9")
+ # The spine build's engine, which prepare_full_build and
+ # prepare_national_build also call before they solve.
+ with pytest.raises(RuntimeError, match="9.9.9 is installed"):
+ spine_build._rules_engine()
+ # The release-cut battery the certifier runs refuses before any gate.
+ with pytest.raises(RuntimeError, match="9.9.9 is installed"):
+ run_uk_release_cut_battery(
+ None,
+ report_path=Path("unused.json"),
+ release_id="unused",
+ diagnostics_sha256="0" * 64,
+ coverage_engine=None,
+ build_stage_names=(),
+ ledger_registries={},
+ local_ledger_registries={},
+ ledger_unsupported={},
+ local_ledger_unsupported={},
+ parity_evidence=None,
+ fit_weight_records=None,
+ input_mass_reference={},
+ exclusions_evaluated_on=date(2026, 10, 18),
+ )
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
new file mode 100644
index 000000000..e80a2f197
--- /dev/null
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_legacy_closure_take_up.py
@@ -0,0 +1,536 @@
+"""Universal Credit claims at the legacy closure, ported from uk-data#534
+(microcosm#1095)."""
+
+from __future__ import annotations
+
+import itertools
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from microcosm.build.stochastic_assignment import stable_identity_uniforms
+from microcosm.build.uk_runtime import legacy_closure_take_up as lc
+from microcosm.build.uk_runtime.national_frame import uk_national_frame
+from microcosm.frame import WeightKind
+
+_CLAIMED = "Claimed UC"
+_CLOSED = "Did not claim UC - Legacy benefit closed"
+_IN_PROGRESS = "In Progress"
+
+
+def _row(legacy_benefit: str, move_status: str, value: float) -> dict:
+ return {
+ "concept": "dwp.mtuc_households_sent_migration_notice",
+ "dimensions": {"legacy_benefit": legacy_benefit, "move_status": move_status},
+ "value": value,
+ }
+
+
+def _rows() -> list[dict]:
+ rows = []
+ for label, claimed, closed, in_progress in (
+ ("Child Tax Credit only", 600.0, 400.0, 50.0),
+ ("Child Tax Credit and Housing Benefit", 900.0, 100.0, 5.0),
+ ("Employment Support Allowance only", 950.0, 50.0, 0.0),
+ ("all", 2_450.0, 550.0, 55.0),
+ ):
+ rows.append(_row(label, _CLAIMED, claimed))
+ rows.append(_row(label, _CLOSED, closed))
+ rows.append(_row(label, _IN_PROGRESS, in_progress))
+ return rows
+
+
+def test_rates_are_claimed_over_claimed_and_closed() -> None:
+ rates = lc.move_to_uc_claim_rates_from_rows(_rows())
+ # Households still in progress are left out (uk-data#534).
+ assert rates == {
+ "all": pytest.approx(2_450 / 3_000),
+ "child_tax_credit": pytest.approx(0.6),
+ "child_tax_credit+housing_benefit": pytest.approx(0.9),
+ "esa_income": pytest.approx(0.95),
+ }
+
+
+def test_combination_keys_follow_the_engine_order() -> None:
+ rows = [
+ row
+ for row in _rows()
+ if row["dimensions"]["legacy_benefit"] != "Child Tax Credit and Housing Benefit"
+ ]
+ rows.append(_row("Housing Benefit and Child Tax Credit", _CLAIMED, 9.0))
+ rows.append(_row("Housing Benefit and Child Tax Credit", _CLOSED, 1.0))
+ rates = lc.move_to_uc_claim_rates_from_rows(rows)
+ assert rates["child_tax_credit+housing_benefit"] == pytest.approx(0.9)
+
+
+def test_rates_refuse_unknown_labels_repeats_and_a_missing_all_row() -> None:
+ with pytest.raises(ValueError, match="Unknown legacy benefit"):
+ lc.move_to_uc_claim_rates_from_rows(
+ [*_rows(), _row("Pension Credit only", _CLAIMED, 1.0)]
+ )
+ with pytest.raises(ValueError, match="repeat"):
+ lc.move_to_uc_claim_rates_from_rows([*_rows(), _row("all", _CLAIMED, 1.0)])
+ no_all = [row for row in _rows() if row["dimensions"]["legacy_benefit"] != "all"]
+ with pytest.raises(ValueError, match="no all-households row"):
+ lc.move_to_uc_claim_rates_from_rows(no_all)
+ no_closed = [
+ row
+ for row in _rows()
+ if row["dimensions"]
+ != {"legacy_benefit": "Child Tax Credit only", "move_status": _CLOSED}
+ ]
+ with pytest.raises(ValueError, match="lack the claimed and closed counts"):
+ lc.move_to_uc_claim_rates_from_rows(no_closed)
+
+
+def test_probabilities_hit_the_rate_at_the_weighted_share_already_claiming() -> None:
+ combination = np.array(["child_tax_credit"] * 4 + ["jsa_income"] * 2, dtype=object)
+ drawn = np.ones(6, dtype=bool)
+ claims_anyway = np.array([True, False, False, False, False, False])
+ # The claimant carries half the cohort's weight: weighted p = 0.5, where
+ # the unweighted share would be 0.25.
+ weights = np.array([3.0, 1.0, 1.0, 1.0, 2.0, 2.0])
+ probability, receipt = lc.legacy_closure_claim_probabilities(
+ combination=combination,
+ drawn=drawn,
+ claims_anyway=claims_anyway,
+ weights=weights,
+ rates={"child_tax_credit": 0.8, "all": 0.6},
+ great_britain=np.ones(6, dtype=bool),
+ source_ids=np.arange(6),
+ )
+ np.testing.assert_allclose(probability[1:4], (0.8 - 0.5) / (1 - 0.5))
+ # A combination DWP does not report takes the all-households rate.
+ 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"}
+
+
+def test_probabilities_clip_where_the_claimants_exceed_the_rate() -> None:
+ probability, _ = lc.legacy_closure_claim_probabilities(
+ combination=np.array(["esa_income"] * 3, dtype=object),
+ drawn=np.ones(3, dtype=bool),
+ claims_anyway=np.array([True, True, False]),
+ weights=np.ones(3),
+ rates={"esa_income": 0.5, "all": 0.5},
+ great_britain=np.ones(3, dtype=bool),
+ source_ids=np.arange(3),
+ )
+ np.testing.assert_array_equal(probability, 0.0)
+
+
+_REPORTED = (
+ *(f"{name}_reported" for name, _ in lc.LEGACY_BENEFITS),
+ "universal_credit_reported",
+)
+
+
+def _frame(
+ reported: dict[str, np.ndarray],
+ would_claim_uc: np.ndarray,
+ weights: np.ndarray,
+ regions=None,
+ *,
+ source_ids=None,
+ lineage: bool = True,
+ time_period: str = "2024",
+):
+ """One person per benefit unit per household; ``source_ids`` makes support
+ copies (each household's own id by default), ``lineage=False`` drops them."""
+
+ n = len(would_claim_uc)
+ ids = np.arange(1, n + 1, dtype="int64")
+ person = pd.DataFrame(
+ {
+ "person_id": ids,
+ "person_household_id": ids,
+ "person_benunit_id": ids,
+ "age": np.full(n, 40, dtype="int64"),
+ **{
+ column: reported.get(column, np.zeros(n)).astype(float)
+ for column in _REPORTED
+ },
+ }
+ )
+ benunit = pd.DataFrame(
+ {
+ "benunit_id": ids,
+ "would_claim_uc": would_claim_uc,
+ # A context cell every graph node receives.
+ "frs_benunit_capital": np.zeros(n),
+ }
+ )
+ household = pd.DataFrame(
+ {
+ "household_id": ids,
+ "region": pd.array(
+ ["NORTH_WEST"] * n if regions is None else list(regions),
+ dtype="string",
+ ),
+ }
+ )
+ if lineage:
+ household["household_source_id"] = (
+ ids if source_ids is None else np.asarray(source_ids, dtype="int64")
+ )
+ return uk_national_frame(
+ person=person,
+ benunit=benunit,
+ household=household,
+ time_period=time_period,
+ weight_kind=WeightKind.DESIGN,
+ household_weights=weights,
+ )
+
+
+_RATES = {"child_tax_credit": 0.6, "child_tax_credit+housing_benefit": 0.9, "all": 0.8}
+
+
+def test_units_outside_the_draw_keep_the_engine_default() -> None:
+ n = 4
+ frame = _frame(
+ {
+ # Unit 1 reports UC beside tax credits; unit 2 would claim anyway;
+ # unit 3 reports no legacy benefit; unit 4 reports Child Tax Credit.
+ "child_tax_credit_reported": np.array([500.0, 500.0, 0.0, 500.0]),
+ "universal_credit_reported": np.array([800.0, 0.0, 0.0, 0.0]),
+ },
+ would_claim_uc=np.array([False, True, False, False]),
+ weights=np.ones(n),
+ )
+ result = lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
+ flag = result.frame.table("benunit")[lc.LEGACY_CLOSURE_OUTPUT].to_numpy()
+ assert flag[:3].all()
+ assert result.evidence()["combinations"] == {
+ "child_tax_credit": {
+ "rate": 0.6,
+ "rate_source": "combination",
+ "rate_unreachable": "<10",
+ "support": "<10",
+ }
+ }
+
+
+def test_the_weighted_share_claiming_matches_dwps_rate() -> None:
+ rng = np.random.default_rng(11)
+ n = 6_000
+ tax_credit = rng.random(n) < 0.7
+ housing = tax_credit & (rng.random(n) < 0.3)
+ frame = _frame(
+ {
+ "child_tax_credit_reported": np.where(tax_credit, 400.0, 0.0),
+ "housing_benefit_reported": np.where(housing, 300.0, 0.0),
+ },
+ would_claim_uc=rng.random(n) < 0.2,
+ weights=rng.uniform(0.5, 3.0, n),
+ )
+ result = lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
+ benunit = result.frame.table("benunit")
+ flag = benunit[lc.LEGACY_CLOSURE_OUTPUT].to_numpy()
+ weights = np.asarray(result.frame.weights_for("household").values)
+ for mask, rate in (
+ (tax_credit & ~housing, 0.6),
+ (housing, 0.9),
+ ):
+ share = weights[mask & flag].sum() / weights[mask].sum()
+ assert share == pytest.approx(rate, abs=0.03)
+ assert result.evidence()["combinations"]["child_tax_credit"]["support"] == "30+"
+ assert result.evidence()["p_basis"] == "spine_design_weights_great_britain"
+ # Both sides of the share claiming rest on thousands of sources: it is given.
+ share = result.evidence()["great_britain_weighted_share_claiming_at_closure"]
+ assert isinstance(share, float)
+
+
+def test_draws_are_keyed_by_benunit_identity() -> None:
+ rng = np.random.default_rng(5)
+ n = 300
+ reported = {"child_tax_credit_reported": np.full(n, 400.0)}
+ full = lc.assign_uc_claim_at_legacy_closure(
+ _frame(reported, would_claim_uc=np.zeros(n, dtype=bool), weights=np.ones(n)),
+ rates=_RATES,
+ )
+ again = lc.assign_uc_claim_at_legacy_closure(
+ _frame(reported, would_claim_uc=np.zeros(n, dtype=bool), weights=np.ones(n)),
+ rates=_RATES,
+ )
+ column = lc.LEGACY_CLOSURE_OUTPUT
+ pd.testing.assert_series_equal(
+ full.frame.table("benunit")[column], again.frame.table("benunit")[column]
+ )
+ # A unit's uniform reads its own id, so the stream does not depend on
+ # which other units the frame carries.
+ ids = np.arange(1, n + 1)
+ subset = ids[rng.random(n) < 0.5]
+ uniforms = stable_identity_uniforms(ids, seed=0, salt=column)
+ np.testing.assert_array_equal(
+ uniforms[subset - 1],
+ stable_identity_uniforms(subset, seed=0, salt=column),
+ )
+
+
+def test_the_stage_refuses_a_stored_output_and_keeps_the_weights() -> None:
+ n = 3
+ frame = _frame(
+ {"esa_income_reported": np.full(n, 100.0)},
+ would_claim_uc=np.zeros(n, dtype=bool),
+ weights=np.full(n, 2.0),
+ )
+ result = lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
+ # A flag only: the weights and the mass log pass through, as in the other
+ # benefit-unit take-up redraws.
+ assert result.frame.mass_log == frame.mass_log
+ np.testing.assert_array_equal(
+ result.frame.weights_for("household").values,
+ frame.weights_for("household").values,
+ )
+ with pytest.raises(ValueError, match="already stored"):
+ lc.assign_uc_claim_at_legacy_closure(result.frame, rates=_RATES)
+
+
+def test_the_packaged_rates_are_dwps_claimed_over_resolved_shares() -> None:
+ rates = lc.load_move_to_uc_claim_rates()
+ # Every combination DWP reports, and the all-households row.
+ assert "all" in rates
+ assert len(rates) == 20
+ assert all(0.0 < rate <= 1.0 for rate in rates.values())
+ assert set(rates) - {"all"} <= {
+ "+".join(names)
+ for size in range(1, 4)
+ for names in itertools.combinations(
+ [name for name, _ in lc.LEGACY_BENEFITS], size
+ )
+ }
+
+
+def test_the_packaged_stage_carries_the_reviewed_operations_in_order() -> None:
+ from microcosm.build.country_spec import load_country_spec
+
+ stages = {stage.stage: stage for stage in load_country_spec("uk").sources.stages}
+ stage = stages[lc.LEGACY_CLOSURE_STAGE_NAME]
+ # Closed world: the transform refuses any drift from the code's constants.
+ lc.UKLegacyClosureTakeUpStageTransform(stage=stage)
+ order = list(stages)
+ position = order.index(lc.LEGACY_CLOSURE_STAGE_NAME)
+ # After the last writers of would_claim_uc and the UC receipts, before the
+ # Pension Credit redraw and any CGT clone.
+ assert order.index("uc_capital_coherence") == position - 1
+ assert position < order.index("pension_credit_take_up")
+ assert position < order.index("cgt_support_split")
+
+
+def test_p_is_measured_over_great_britain_and_applied_in_northern_ireland() -> None:
+ # Four Great Britain units, one claiming anyway (p = 0.25), and two Northern
+ # Irish units claiming anyway, which a UK-wide p would count (0.5).
+ combination = np.array(["child_tax_credit"] * 6, dtype=object)
+ great_britain = np.array([True, True, True, True, False, False])
+ probability, _ = lc.legacy_closure_claim_probabilities(
+ combination=combination,
+ drawn=np.ones(6, dtype=bool),
+ claims_anyway=np.array([True, False, False, False, True, True]),
+ weights=np.ones(6),
+ rates={"child_tax_credit": 0.8, "all": 0.8},
+ great_britain=great_britain,
+ source_ids=np.arange(6),
+ )
+ 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:
+ # 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.
+ kwargs = dict(
+ combination=np.array(["esa_income"] * 30, dtype=object),
+ drawn=np.ones(30, dtype=bool),
+ claims_anyway=np.arange(30) < 20,
+ weights=np.ones(30),
+ rates={"esa_income": 0.5, "all": 0.5},
+ great_britain=np.ones(30, dtype=bool),
+ )
+ probability, receipt = lc.legacy_closure_claim_probabilities(
+ **kwargs, source_ids=np.arange(30)
+ )
+ 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.
+ _, receipt = lc.legacy_closure_claim_probabilities(
+ **kwargs, source_ids=np.arange(30) % 3
+ )
+ assert receipt["esa_income"]["rate_unreachable"] == "<10"
+ assert receipt["esa_income"]["support"] == "<10"
+ # 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"
+
+
+def test_a_combination_without_great_britain_units_has_no_flag() -> None:
+ _, receipt = lc.legacy_closure_claim_probabilities(
+ combination=np.array(["esa_income"] * 12, dtype=object),
+ drawn=np.ones(12, dtype=bool),
+ claims_anyway=np.zeros(12, dtype=bool),
+ weights=np.ones(12),
+ rates={"esa_income": 0.5, "all": 0.5},
+ great_britain=np.zeros(12, dtype=bool),
+ source_ids=np.arange(12),
+ )
+ # Northern Ireland only: there is no p, so no flag, not "<10".
+ assert receipt["esa_income"]["rate_unreachable"] is None
+
+
+def test_the_share_claiming_hides_a_small_side() -> None:
+ # Forty Great Britain units on forty sources, two claiming anyway at a
+ # rate they already exceed, so only those two claim: the share times the
+ # drawn weight would give their weight back, so it is withheld.
+ n = 40
+ frame = _frame(
+ {"child_tax_credit_reported": np.full(n, 400.0)},
+ would_claim_uc=np.arange(n) < 2,
+ weights=np.ones(n),
+ )
+ evidence = lc.assign_uc_claim_at_legacy_closure(
+ 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"
+ # The flag is withheld too: one side of p rests on two sources.
+ assert evidence["combinations"]["child_tax_credit"]["rate_unreachable"] == "<10"
+
+
+def test_the_receipt_aggregates_cover_great_britain_only() -> None:
+ n = 40
+ regions = ["NORTH_WEST"] * 30 + ["NORTHERN_IRELAND"] * 10
+ frame = _frame(
+ {"child_tax_credit_reported": np.full(n, 400.0)},
+ would_claim_uc=np.zeros(n, dtype=bool),
+ weights=np.full(n, 2.0),
+ regions=regions,
+ )
+ result = lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
+ # Thirty Great Britain units at weight 2; Northern Ireland's are left out.
+ assert result.evidence()["great_britain_drawn_benunit_weight"] == pytest.approx(
+ 60.0
+ )
+
+
+def _graph_evidence(frame) -> dict:
+ """The stage's receipt from the production node, run as a graph build runs it.
+
+ The executor hands the kernel only the cells the node declares, so a
+ column the stage reads but the node does not declare is missing here.
+ """
+
+ from microcosm.build.country_spec import load_country_spec
+ from microcosm.build.uk_runtime.graph import uk_spine_graph
+ from microcosm.build.uk_runtime.graph_kernels import UKStageKernel
+ from microcosm.graph.executor import _project_context
+ from microcosm.graph.population import Population
+
+ node = uk_spine_graph(source_mode="split").node(lc.LEGACY_CLOSURE_STAGE_NAME)
+ context = _project_context(
+ node,
+ Population.from_frame(frame, "legacy-closure-input"),
+ key="0" * 64,
+ sources={},
+ tolerances={},
+ numerics={},
+ )
+ stage = load_country_spec("uk").sources.stage_map()[lc.LEGACY_CLOSURE_STAGE_NAME]
+ transform = lc.UKLegacyClosureTakeUpStageTransform(stage=stage, rates=_RATES)
+ UKStageKernel(lc.LEGACY_CLOSURE_STAGE_NAME, transform).run(context)
+ 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.
+ 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,
+ )
+
+
+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.
+ combinations = lc.assign_uc_claim_at_legacy_closure(
+ _copies_of_three_households(), rates=_RATES
+ ).evidence()["combinations"]
+ assert combinations["esa_income"]["rate_unreachable"] == "<10"
+ assert combinations["esa_income"]["support"] == "<10"
+
+
+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"
+
+
+def test_the_stage_refuses_a_frame_without_lineage() -> None:
+ frame = _frame(
+ {"esa_income_reported": np.full(3, 100.0)},
+ would_claim_uc=np.zeros(3, dtype=bool),
+ weights=np.ones(3),
+ lineage=False,
+ )
+ with pytest.raises(ValueError, match="household_source_id"):
+ lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
+
+
+def test_the_stage_measures_p_over_great_britain() -> None:
+ # Twenty Great Britain units, ten claiming anyway (p = 0.5, below the rate
+ # of 0.6), and twenty Northern Irish units claiming anyway, which a
+ # UK-wide p would count (0.75, above it): only the Great Britain basis
+ # leaves the rate reachable. Each side of p rests on ten sources.
+ n = 40
+ frame = _frame(
+ {"child_tax_credit_reported": np.full(n, 400.0)},
+ would_claim_uc=np.r_[np.arange(20) < 10, np.ones(20, dtype=bool)],
+ weights=np.ones(n),
+ regions=["NORTH_WEST"] * 20 + ["NORTHERN_IRELAND"] * 20,
+ )
+ combinations = lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES).evidence()[
+ "combinations"
+ ]
+ assert combinations["child_tax_credit"]["rate_unreachable"] is False
+
+
+@pytest.mark.parametrize("period", ["2023", "2030", "2024-25"])
+def test_the_transform_refuses_a_frame_outside_the_mapped_period(period) -> None:
+ from microcosm.build.country_spec import load_country_spec
+
+ stage = load_country_spec("uk").sources.stage_map()[lc.LEGACY_CLOSURE_STAGE_NAME]
+ frame = _frame(
+ {"esa_income_reported": np.full(3, 100.0)},
+ would_claim_uc=np.zeros(3, dtype=bool),
+ weights=np.ones(3),
+ time_period=period,
+ )
+ # DWP's cumulative rates are mapped to build period 2024 only: an earlier
+ # or a later year, or a fiscal-year label, is refused by name.
+ with pytest.raises(ValueError, match="build period 2024"):
+ lc.UKLegacyClosureTakeUpStageTransform(stage=stage, rates=_RATES)(frame)
+
+
+def test_the_stage_refuses_a_null_lineage() -> None:
+ frame = _frame(
+ {"esa_income_reported": np.full(3, 100.0)},
+ would_claim_uc=np.zeros(3, dtype=bool),
+ weights=np.ones(3),
+ )
+ frame.table("household")["household_source_id"] = pd.array(
+ [1, None, 3], dtype="Int64"
+ )
+ # A null would drop out of a distinct count or count as one source.
+ with pytest.raises(ValueError, match="null"):
+ lc.assign_uc_claim_at_legacy_closure(frame, rates=_RATES)
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 f9872cffa..2ca0074f7 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
@@ -204,6 +204,7 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None:
"linear_combination",
"scaled_by_ratio",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
"rolled_forward_by_ratio",
]
assert resource["resolution_defaults"] == {
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
new file mode 100644
index 000000000..37977404b
--- /dev/null
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_property_purchases.py
@@ -0,0 +1,654 @@
+"""Annual property purchases, ported from uk-data#573 (microcosm#1095)."""
+
+from __future__ import annotations
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from microcosm.build.country_spec import load_country_spec
+from microcosm.build.uk_runtime import property_purchases as pp
+from microcosm.build.uk_runtime.national_frame import uk_national_frame
+from microcosm.frame import WeightKind
+
+_HRAD = "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024"
+_RES_IND = "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024"
+_RES_OTHER = "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024"
+_NONRES_IND = "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+#: Table 6b's ten bands (count, value in GBP m), and the five above GBP 2m.
+_HRAD_BANDS = {
+ "gbp_250k_or_less": (1_000.0, 150.0),
+ "gbp_250k_to_500k": (500.0, 180.0),
+ "gbp_500k_to_1m": (200.0, 140.0),
+ "gbp_1m_to_1_5m": (40.0, 48.0),
+ "gbp_1_5m_to_2m": (20.0, 35.0),
+ "gbp_2m_to_3m": (8.0, 20.0),
+ "gbp_3m_to_4m": (4.0, 14.0),
+ "gbp_4m_to_5m": (2.0, 9.0),
+ "gbp_5m_to_10m": (2.0, 14.0),
+ "over_gbp_10m": (1.0, 15.0),
+}
+_NONRES_BANDS = {
+ "gbp_250k_or_less": (300.0, 25.0),
+ "gbp_250k_to_500k": (60.0, 21.0),
+ "gbp_500k_to_1m": (25.0, 18.0),
+ "gbp_1m_to_1_5m": (8.0, 10.0),
+ "gbp_1_5m_to_2m": (4.0, 7.0),
+ "over_gbp_2m": (6.0, 30.0),
+}
+
+
+def _row(record_set: str, concept: str, band: str, value: float) -> dict:
+ return {
+ "concept": concept,
+ "layout": {"record_set_id": record_set, "groupby_value_id": band},
+ "value": value,
+ }
+
+
+def _rows() -> list[dict]:
+ rows = []
+ for band, (count, value) in _HRAD_BANDS.items():
+ rows.append(_row(_HRAD, "hmrc.sdlt.hrad_transactions", band, count))
+ rows.append(_row(_HRAD, "hmrc.sdlt.hrad_property_value", band, value * 1e6))
+ rows.append(_row(_HRAD, "hmrc.sdlt.hrad_transactions", "all_price_bands", 1_800.0))
+ rows.append(_row(_HRAD, "hmrc.sdlt.hrad_property_value", "all_price_bands", 625e6))
+ for record_set, count, value in (
+ (_RES_IND, 9_000.0, 3_000e6),
+ (_RES_OTHER, 1_000.0, 1_000e6),
+ ):
+ rows.append(
+ _row(record_set, "hmrc.sdlt.transactions", "all_price_bands", count)
+ )
+ rows.append(
+ _row(record_set, "hmrc.sdlt.property_value", "all_price_bands", value)
+ )
+ for band, (count, value) in _NONRES_BANDS.items():
+ rows.append(_row(_NONRES_IND, "hmrc.sdlt.transactions", band, count))
+ rows.append(_row(_NONRES_IND, "hmrc.sdlt.property_value", band, value * 1e6))
+ rows.append(_row(_NONRES_IND, "hmrc.sdlt.transactions", "all_price_bands", 400.0))
+ rows.append(_row(_NONRES_IND, "hmrc.sdlt.property_value", "all_price_bands", 110e6))
+ return rows
+
+
+def test_targets_allocate_hrad_by_individuals_shares_and_combine_top_bands() -> None:
+ targets = pp.property_purchase_targets_from_rows(_rows())
+ additional = targets.additional_residential
+ # uk-data#573: Table 6b's all-buyer HRAD times individuals' Table 8a shares.
+ assert additional.transactions == pytest.approx(1_800.0 * 9_000 / 10_000)
+ assert additional.value == pytest.approx(625e6 * 3_000 / 4_000)
+ assert additional.band_ids == pp.PROPERTY_PURCHASE_BAND_IDS
+ # The five bands above GBP 2m become one: 8+4+2+2+1 transactions.
+ assert additional.band_transactions[-1] == 17.0
+ assert additional.band_values[-1] == pytest.approx(72e6)
+ assert additional.minimum_price == pp.HMRC_SDLT_MINIMUM_CONSIDERATION
+ non_residential = targets.non_residential
+ assert non_residential.transactions == 400.0
+ assert non_residential.value == pytest.approx(110e6)
+ assert non_residential.band_transactions == tuple(
+ count for count, _ in _NONRES_BANDS.values()
+ )
+ assert targets.derivation["residential_individuals_transaction_share"] == 0.9
+ assert targets.derivation["residential_individuals_value_share"] == 0.75
+
+
+def test_targets_round_trip_through_the_payload() -> None:
+ targets = pp.property_purchase_targets_from_rows(_rows())
+ assert pp.UKPropertyPurchaseTargets.from_payload(targets.payload()) == targets
+
+
+def test_targets_refuse_missing_totals_duplicates_and_odd_bands() -> None:
+ rows = [row for row in _rows() if row["layout"]["record_set_id"] != _RES_OTHER]
+ with pytest.raises(ValueError, match="carries no"):
+ pp.property_purchase_targets_from_rows(rows)
+ rows = _rows()
+ rows.append(_row(_NONRES_IND, "hmrc.sdlt.transactions", "gbp_250k_or_less", 1.0))
+ with pytest.raises(ValueError, match="repeats band"):
+ pp.property_purchase_targets_from_rows(rows)
+ rows = [
+ row
+ for row in _rows()
+ if not (
+ row["layout"]["record_set_id"] == _HRAD
+ and row["layout"]["groupby_value_id"] == "over_gbp_10m"
+ )
+ ]
+ with pytest.raises(ValueError, match="bands to combine are missing"):
+ pp.property_purchase_targets_from_rows(rows)
+
+
+def _target(
+ transactions: float = 30.0, value: float = 9e6
+) -> pp.UKPropertyPurchaseTarget:
+ return pp.UKPropertyPurchaseTarget(
+ property_type="additional_residential",
+ transactions=transactions,
+ value=value,
+ band_ids=pp.PROPERTY_PURCHASE_BAND_IDS,
+ band_transactions=(50.0, 30.0, 10.0, 5.0, 3.0, 2.0),
+ band_values=(10e6, 12e6, 8e6, 6e6, 5e6, 8e6),
+ minimum_price=40_000.0,
+ )
+
+
+def _inputs(n: int = 400, seed: int = 7) -> dict[str, np.ndarray]:
+ rng = np.random.default_rng(seed)
+ stock = np.where(rng.random(n) < 0.6, rng.lognormal(12.5, 1.0, n), 0.0)
+ stock[:5] = 30_000.0 # below the floor: never eligible
+ weights = rng.uniform(0.5, 2.0, n)
+ weights[5] = 0.0 # zero weight: never buys
+ stock[5] = 500_000.0
+ sdlt = rng.random(n) < 0.85
+ return {
+ "stock": stock,
+ "weights": weights,
+ "sdlt_mask": sdlt,
+ "event_uniforms": rng.random(n),
+ "price_uniforms": rng.random(n),
+ # Each row its own source household.
+ "source_ids": np.arange(n),
+ }
+
+
+def test_prices_fit_the_count_and_value_within_the_floor_and_the_stock() -> None:
+ inputs = _inputs()
+ target = _target()
+ result = pp.impute_property_purchase_prices(**inputs, target=target)
+ prices = result.prices
+ bought = prices > 0
+ fitted = bought & inputs["sdlt_mask"]
+ weights = inputs["weights"]
+ # The closest attainable count, and the value fitted exactly.
+ assert abs(weights[fitted].sum() - target.transactions) <= weights.max()
+ assert float(np.dot(prices, weights * inputs["sdlt_mask"])) == pytest.approx(
+ target.value, rel=1e-8
+ )
+ assert np.all(prices[bought] >= target.minimum_price)
+ 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+"}
+
+
+def test_the_threshold_applies_outside_the_fit_regions() -> None:
+ inputs = _inputs()
+ inputs["sdlt_mask"] = np.ones_like(inputs["sdlt_mask"])
+ inputs["sdlt_mask"][-50:] = False
+ result = pp.impute_property_purchase_prices(**inputs, target=_target())
+ 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+"}
+
+
+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.
+ 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.
+ sources = np.arange(n)
+ sources[-50:] = 10_000 + np.arange(50) % 3
+ 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["fitted_value"] == pytest.approx(9e6, rel=1e-8)
+ # Every fit-region row belongs to one of five households.
+ few = np.arange(n) % 5
+ result = pp.impute_property_purchase_prices(
+ **{**inputs, "source_ids": few}, target=_target()
+ )
+ for field in (
+ "fitted_transactions",
+ "fitted_value",
+ "value_shortfall_share",
+ "eligible_owner_weight",
+ "event_rate",
+ "price_scale",
+ ):
+ assert result.receipt[field] == "<10", field
+ assert result.receipt["purchaser_support"] == "<10"
+
+
+def _capped_inputs(capped: int, uncapped: int) -> dict[str, np.ndarray]:
+ """Every row buys in the fit regions: ``capped`` rows hold the £40,000
+ floor, so they buy at their stock at any scale, and ``uncapped`` rows hold
+ more than any band draw."""
+
+ n = capped + uncapped
+ rng = np.random.default_rng(13)
+ return {
+ "stock": np.r_[np.full(capped, 40_000.0), np.full(uncapped, 1e9)],
+ "weights": np.ones(n),
+ "sdlt_mask": np.ones(n, dtype=bool),
+ "event_uniforms": rng.random(n),
+ "price_uniforms": rng.random(n),
+ }
+
+
+def _capped_receipt(capped: int, uncapped: int, sources: np.ndarray) -> dict:
+ # A value the uncapped rows' scaled band draws make up beside the floor.
+ target = _target(
+ transactions=float(capped + uncapped),
+ value=capped * 40_000.0 + uncapped * 480_000.0,
+ )
+ receipt = pp.impute_property_purchase_prices(
+ **_capped_inputs(capped, uncapped), target=target, source_ids=sources
+ ).receipt
+ assert receipt["value_fit"] == "scaled_band_draws"
+ return receipt
+
+
+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.
+ 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
+ # withheld too.
+ receipt = _capped_receipt(37, 3, np.r_[np.arange(37), np.arange(3)])
+ 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.
+ 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:
+ # 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.
+ 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,
+ )
+ assert result.receipt["value_fit"] == "stock_cap"
+ assert result.receipt["purchaser_support"] == "<10"
+ assert result.receipt["weighted_share_at_stock_cap"] == "<10"
+
+
+def test_an_empty_cell_reads_zero() -> None:
+ # No purchase outside the fit regions: 0 beside a zero weight, not "<10".
+ receipt = _capped_receipt(12, 28, np.arange(40))
+ assert receipt["purchases_outside_sdlt_regions_weight"] == 0.0
+ assert receipt["outside_sdlt_regions_support"] == 0
+
+
+def _non_buyer_receipt(buyers: int, others: int, sources: np.ndarray) -> dict:
+ """Every row eligible in the fit regions; the ``others`` hold the latest
+ events, so exactly ``buyers`` rows buy."""
+
+ n = buyers + others
+ uniforms = np.r_[np.full(buyers, 0.01), np.full(others, 0.99)]
+ return pp.impute_property_purchase_prices(
+ stock=np.full(n, 200_000.0),
+ weights=np.ones(n),
+ sdlt_mask=np.ones(n, dtype=bool),
+ event_uniforms=uniforms,
+ price_uniforms=np.random.default_rng(3).random(n),
+ target=_target(transactions=float(buyers), value=buyers * 150_000.0),
+ source_ids=sources,
+ ).receipt
+
+
+def test_the_eligible_weight_hides_a_small_side_that_does_not_buy() -> None:
+ # Thirty-eight of forty eligible rows buy; the two that do not copy one
+ # source. The eligible weight less the fitted transactions would give that
+ # 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"
+ # 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)
+ assert receipt["event_rate"] == pytest.approx(38 / 60)
+
+
+def test_infeasible_targets_refuse() -> None:
+ inputs = _inputs()
+ with pytest.raises(ValueError, match="less weight than the purchase target"):
+ pp.impute_property_purchase_prices(**inputs, target=_target(transactions=1e9))
+ with pytest.raises(ValueError, match="carries less than 80%"):
+ pp.impute_property_purchase_prices(**inputs, target=_target(value=1e15))
+ with pytest.raises(ValueError, match="below the minimum transaction price"):
+ pp.impute_property_purchase_prices(**inputs, target=_target(value=1.0))
+
+
+def test_a_short_stock_buys_at_the_stock_and_records_the_shortfall() -> None:
+ # María's ruling of 2026-10-16: where the purchasers' stock cannot carry
+ # HMRC's value, each buys at its stock and the shortfall is recorded; the
+ # stage refuses only below PURCHASE_MINIMUM_VALUE_SHARE of the value.
+ inputs = _inputs()
+ mask, _ = pp.select_property_purchasers(
+ stock=inputs["stock"],
+ weights=inputs["weights"],
+ sdlt_mask=inputs["sdlt_mask"],
+ event_uniforms=inputs["event_uniforms"],
+ transactions=30.0,
+ minimum_price=40_000.0,
+ property_type="additional_residential",
+ )
+ fitted = mask & inputs["sdlt_mask"]
+ capacity = float(np.dot(inputs["stock"], inputs["weights"] * fitted))
+ result = pp.impute_property_purchase_prices(
+ **inputs, target=_target(transactions=30.0, value=capacity / 0.9)
+ )
+ np.testing.assert_allclose(result.prices[mask], inputs["stock"][mask])
+ assert not result.prices[~mask].any()
+ receipt = result.receipt
+ assert receipt["value_fit"] == "stock_cap"
+ assert receipt["price_scale"] is None
+ assert receipt["fitted_value"] == pytest.approx(capacity)
+ assert receipt["value_shortfall_share"] == pytest.approx(0.1)
+ assert receipt["weighted_share_at_stock_cap"] == pytest.approx(1.0)
+ with pytest.raises(ValueError, match="carries less than 80%"):
+ pp.impute_property_purchase_prices(
+ **inputs, target=_target(transactions=30.0, value=capacity / 0.75)
+ )
+ fitted_in_full = pp.impute_property_purchase_prices(**inputs, target=_target())
+ assert fitted_in_full.receipt["value_fit"] == "scaled_band_draws"
+ assert fitted_in_full.receipt["value_shortfall_share"] == pytest.approx(0.0)
+
+
+def _frame(n: int = 300, seed: int = 3, time_period: str = "2024"):
+ rng = np.random.default_rng(seed)
+ regions = np.array(
+ ["LONDON", "SOUTH_EAST", "NORTHERN_IRELAND", "SCOTLAND", "WALES", "NORTH_WEST"]
+ )
+ household = pd.DataFrame(
+ {
+ "household_id": np.arange(1, n + 1, dtype="int64"),
+ "household_source_id": np.arange(1, n + 1, dtype="int64"),
+ "region": pd.array(regions[rng.integers(0, 6, n)], dtype="string"),
+ "other_residential_property_value": np.where(
+ rng.random(n) < 0.5, rng.lognormal(12.6, 0.8, n), 0.0
+ ),
+ "non_residential_property_value": np.where(
+ rng.random(n) < 0.4, rng.lognormal(12.4, 0.9, n), 0.0
+ ),
+ }
+ )
+ benunit = pd.DataFrame({"benunit_id": np.arange(1, n + 1, dtype="int64")})
+ person = pd.DataFrame(
+ {
+ "person_id": np.arange(1, n + 1, dtype="int64"),
+ "person_household_id": np.arange(1, n + 1, dtype="int64"),
+ "person_benunit_id": np.arange(1, n + 1, dtype="int64"),
+ "age": np.full(n, 50, dtype="int64"),
+ }
+ )
+ return uk_national_frame(
+ person=person,
+ benunit=benunit,
+ household=household,
+ time_period=time_period,
+ weight_kind=WeightKind.DESIGN,
+ household_weights=rng.uniform(1.0, 3.0, n),
+ )
+
+
+def _frame_targets(non_residential_value: float = 10e6) -> pp.UKPropertyPurchaseTargets:
+ residential = _target(transactions=40.0, value=18e6)
+ return pp.UKPropertyPurchaseTargets(
+ additional_residential=residential,
+ non_residential=pp.UKPropertyPurchaseTarget(
+ property_type="non_residential",
+ transactions=30.0,
+ value=non_residential_value,
+ band_ids=residential.band_ids,
+ band_transactions=residential.band_transactions,
+ band_values=residential.band_values,
+ minimum_price=40_000.0,
+ ),
+ )
+
+
+def test_the_stage_writes_both_purchases_and_conserves_mass() -> None:
+ frame = _frame()
+ result = pp.impute_property_purchases(frame, targets=_frame_targets())
+ household = result.frame.table("household")
+ for column in pp.PROPERTY_PURCHASES_OUTPUT_COLUMNS:
+ assert column in household.columns
+ assert np.all(
+ household["additional_residential_property_purchased"]
+ <= household["other_residential_property_value"] + 1e-6
+ )
+ assert np.all(
+ household["non_residential_property_purchased"]
+ <= household["non_residential_property_value"] + 1e-6
+ )
+ # Both kinds buy: positive prices, and the fit reaches its targets.
+ for column in pp.PROPERTY_PURCHASES_OUTPUT_COLUMNS:
+ assert (household[column] > 0).any(), column
+ for kind in result.evidence()["kinds"]:
+ assert kind["fitted_transactions"] > 0
+ assert kind["fitted_value"] > 0
+ record = result.frame.mass_log[-1]
+ assert record.declared_factor == 1.0
+ assert record.reason == pp.PROPERTY_PURCHASES_MASS_CHANGE_REASON
+ assert record.old_total == pytest.approx(record.new_total)
+ evidence = result.evidence()
+ assert [kind["property_type"] for kind in evidence["kinds"]] == [
+ "additional_residential",
+ "non_residential",
+ ]
+
+
+def test_the_stage_fits_one_kind_at_its_stock_beside_one_it_scales() -> None:
+ # As on the national spine: the non-residential purchasers' stock carries
+ # nine tenths of the value, so they buy at it, while additional dwellings
+ # fit their value with scaled band draws.
+ frame = _frame()
+ household = frame.table("household")
+ weights = np.asarray(frame.weights_for("household").values)
+ sdlt = pp.sdlt_region_mask(household["region"])
+ kind = next(k for k in pp.PROPERTY_PURCHASE_KINDS if k.name == "non_residential")
+ stock = household[kind.stock].to_numpy(dtype=float)
+ event_uniforms, _ = pp.property_purchase_uniforms(
+ household["household_id"].to_numpy(), kind
+ )
+ purchased, _ = pp.select_property_purchasers(
+ stock=stock,
+ weights=weights,
+ sdlt_mask=sdlt,
+ event_uniforms=event_uniforms,
+ transactions=30.0,
+ minimum_price=40_000.0,
+ property_type=kind.name,
+ )
+ capacity = float(np.dot(stock, weights * (purchased & sdlt)))
+ result = pp.impute_property_purchases(
+ frame, targets=_frame_targets(non_residential_value=capacity / 0.9)
+ )
+ kinds = {k["property_type"]: k for k in result.evidence()["kinds"]}
+ assert kinds["additional_residential"]["value_fit"] == "scaled_band_draws"
+ assert kinds["non_residential"]["value_fit"] == "stock_cap"
+ assert kinds["non_residential"]["value_shortfall_share"] == pytest.approx(0.1)
+ after = result.frame.table("household")
+ np.testing.assert_allclose(
+ after[kind.output].to_numpy()[purchased], stock[purchased]
+ )
+
+
+def test_the_packaged_targets_reproduce_uk_data_573() -> None:
+ # The vendored HMRC Stamp Tax rows give uk-data#573's household figures.
+ targets = pp.load_property_purchase_targets()
+ additional = targets.additional_residential
+ assert additional.transactions == pytest.approx(186_588.8624, rel=1e-9)
+ assert additional.value == pytest.approx(68_805_261_766.68, rel=1e-9)
+ non_residential = targets.non_residential
+ assert non_residential.transactions == pytest.approx(25_000.0)
+ assert non_residential.value == pytest.approx(7.64e9)
+ assert additional.band_ids == pp.PROPERTY_PURCHASE_BAND_IDS
+
+
+def test_draws_are_keyed_by_household_identity() -> None:
+ ids = np.arange(1, 501, dtype="int64")
+ subset = ids[::3]
+ for kind in pp.PROPERTY_PURCHASE_KINDS:
+ full_event, full_price = pp.property_purchase_uniforms(ids, kind)
+ part_event, part_price = pp.property_purchase_uniforms(subset, kind)
+ # A household's uniforms do not depend on which others are drawn.
+ np.testing.assert_array_equal(full_event[::3], part_event)
+ np.testing.assert_array_equal(full_price[::3], part_price)
+ assert not np.allclose(full_event, full_price)
+ residential, non_residential = (
+ pp.property_purchase_uniforms(ids, kind)[0]
+ for kind in pp.PROPERTY_PURCHASE_KINDS
+ )
+ # Each kind reads its own stream.
+ assert not np.allclose(residential, non_residential)
+
+
+def test_the_stage_is_deterministic() -> None:
+ frame = _frame()
+ first = pp.impute_property_purchases(frame, targets=_frame_targets())
+ second = pp.impute_property_purchases(frame, targets=_frame_targets())
+ columns = list(pp.PROPERTY_PURCHASES_OUTPUT_COLUMNS)
+ pd.testing.assert_frame_equal(
+ first.frame.table("household")[columns],
+ second.frame.table("household")[columns],
+ )
+
+
+def test_the_stage_refuses_a_stored_output_or_a_missing_lineage() -> None:
+ frame = _frame()
+ stored = pp.impute_property_purchases(frame, targets=_frame_targets()).frame
+ with pytest.raises(ValueError, match="already stored"):
+ pp.impute_property_purchases(stored, targets=_frame_targets())
+ household = frame.table("household").drop(columns="household_source_id")
+ bare = uk_national_frame(
+ person=frame.table("person"),
+ benunit=frame.table("benunit"),
+ household=household,
+ time_period="2024",
+ weight_kind=WeightKind.DESIGN,
+ household_weights=np.asarray(frame.weights_for("household").values),
+ )
+ with pytest.raises(ValueError, match="household_source_id"):
+ pp.impute_property_purchases(bare, targets=_frame_targets())
+ # A null would drop out of a distinct count or count as one source.
+ nulls = _frame()
+ sources = nulls.table("household")["household_source_id"].astype("Int64")
+ sources.iloc[0] = None
+ nulls.table("household")["household_source_id"] = sources
+ with pytest.raises(ValueError, match="null"):
+ pp.impute_property_purchases(nulls, targets=_frame_targets())
+
+
+def _copies_frame():
+ """Twelve London households, support copies of three sources, each with
+ other residential stock to buy with."""
+
+ n = 12
+ ids = np.arange(1, n + 1, dtype="int64")
+ household = pd.DataFrame(
+ {
+ "household_id": ids,
+ "household_source_id": np.arange(n, dtype="int64") % 3,
+ "region": pd.array(["LONDON"] * n, dtype="string"),
+ "other_residential_property_value": np.full(n, 200_000.0),
+ "non_residential_property_value": np.zeros(n),
+ }
+ )
+ return uk_national_frame(
+ person=pd.DataFrame(
+ {
+ "person_id": ids,
+ "person_household_id": ids,
+ "person_benunit_id": ids,
+ "age": np.full(n, 50, dtype="int64"),
+ # The node's shape anchor, the preceding stage's receipts.
+ "property_rental_income": np.zeros(n),
+ }
+ ),
+ # A context cell every graph node receives.
+ benunit=pd.DataFrame({"benunit_id": ids, "frs_benunit_capital": np.zeros(n)}),
+ household=household,
+ time_period="2024",
+ weight_kind=WeightKind.DESIGN,
+ household_weights=np.ones(n),
+ )
+
+
+def _copies_targets() -> pp.UKPropertyPurchaseTargets:
+ # Every copy buys: twelve transactions, at a value the stock carries.
+ return pp.UKPropertyPurchaseTargets(
+ additional_residential=_target(transactions=12.0, value=12 * 150_000.0),
+ non_residential=None,
+ )
+
+
+def _graph_evidence(frame) -> dict:
+ """The stage's receipt from the production node, run as a graph build runs it.
+
+ The executor hands the kernel only the cells the node declares, so a
+ column the stage reads but the node does not declare is missing here.
+ """
+
+ from microcosm.build.uk_runtime.graph import uk_spine_graph
+ from microcosm.build.uk_runtime.graph_kernels import UKStageKernel
+ from microcosm.graph.executor import _project_context
+ from microcosm.graph.population import Population
+
+ node = uk_spine_graph(source_mode="split").node("property_purchases")
+ context = _project_context(
+ node,
+ Population.from_frame(frame, "property-purchases-input"),
+ key="0" * 64,
+ sources={},
+ tolerances={},
+ numerics={},
+ )
+ stage = load_country_spec("uk").sources.stage_map()["property_purchases"]
+ transform = pp.UKPropertyPurchasesStageTransform(
+ stage=stage, targets=_copies_targets()
+ )
+ UKStageKernel("property_purchases", transform).run(context)
+ return transform.checkpoint_metadata()["evidence"]
+
+
+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
+ # 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"
+
+
+@pytest.mark.parametrize("period", ["2023", "2030", "2024-25"])
+def test_the_stage_refuses_a_frame_outside_the_mapped_period(period) -> None:
+ # The 2024-25 Stamp Tax facts are mapped to build period 2024 only: an
+ # earlier or a later year, or a fiscal-year label, is refused by name.
+ with pytest.raises(ValueError, match="build period 2024"):
+ pp.impute_property_purchases(
+ _frame(time_period=period), targets=_frame_targets()
+ )
+
+
+def test_the_packaged_stage_carries_the_reviewed_operations_in_order() -> None:
+ stages = {stage.stage: stage for stage in load_country_spec("uk").sources.stages}
+ stage = stages["property_purchases"]
+ # Closed world: the transform refuses any drift from the code's constants.
+ pp.UKPropertyPurchasesStageTransform(stage=stage)
+ order = list(stages)
+ position = order.index("property_purchases")
+ # After the uprating and the support copies, before any CGT clone.
+ assert order.index("regional_property_uprating") < position
+ assert order.index("high_value_home_support") < position
+ assert order.index("property_components") < position
+ assert position < order.index("cgt_support_split")
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 21af202ab..b8e7e7aa4 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
@@ -9,6 +9,7 @@
floored_share,
rounded_count,
small_cell_share,
+ support_band,
)
@@ -49,11 +50,23 @@ def test_extreme_count(count, expected) -> None:
assert extreme_count(count) == expected
+@pytest.mark.parametrize(
+ ("count", "expected"),
+ [(0, 0), (1, "<10"), (9, "<10"), (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
+ # zero weight.
+ assert support_band(count) == expected
+
+
def test_counts_refuse_a_negative_count() -> None:
with pytest.raises(ValueError, match="negative"):
rounded_count(-1)
with pytest.raises(ValueError, match="negative"):
extreme_count(-1)
+ with pytest.raises(ValueError, match="negative"):
+ support_band(-1)
@pytest.mark.parametrize(
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
new file mode 100644
index 000000000..c44f1e090
--- /dev/null
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_regional_home_values.py
@@ -0,0 +1,394 @@
+"""Home values from the region's Land Registry distribution on the spine
+(microcosm#1112, microcosm#1095)."""
+
+from __future__ import annotations
+
+import dataclasses
+import json
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from microcosm.build.country_spec import load_country_spec
+from microcosm.build.uk_runtime import property_localisation
+from microcosm.build.uk_runtime import regional_home_values as rhv
+from microcosm.build.uk_runtime.atomic_area_support import (
+ uk_atomic_assignment_definition,
+)
+from microcosm.build.uk_runtime.graph_kernels import UKClaimKernel
+from microcosm.build.uk_runtime.graph_population import (
+ append_uk_population_nodes,
+ register_uk_population_kernels,
+)
+from microcosm.build.uk_runtime.household_lineage import HIGH_VALUE_SUPPORT_COPY_COLUMN
+from microcosm.build.uk_runtime.national_frame import (
+ UK_RELEASE_EXPORT_DROPPED_COLUMNS,
+ uk_national_frame,
+)
+from microcosm.frame import Frame, WeightKind
+from microcosm.graph import (
+ ContentStore,
+ Graph,
+ KernelRegistry,
+ KernelResult,
+ SourceRef,
+ compile_graph,
+ run_graph,
+)
+from test_support.microcosm_build.uk_atomic_support_fixtures import (
+ toy_support_sources,
+ write_toy_property_resources,
+ write_toy_supports,
+)
+from test_support.microcosm_build.uk_full_population_graph import (
+ SOURCE_VINTAGE,
+ Source,
+ source_frame,
+ source_node,
+)
+from test_support.microcosm_build.uk_ladder_rowwise_clone import (
+ toy_ladder as toy_ladder,
+)
+
+_REGIONS = ("LONDON", "NORTH_EAST", "WALES", "SCOTLAND", "NORTHERN_IRELAND")
+
+
+def _frame(n: int = 200, seed: int = 5, *, source_ids=None, lineage: bool = True):
+ """Households of five regions; ``source_ids`` makes support copies (each
+ household's own id by default), ``lineage=False`` drops them."""
+
+ rng = np.random.default_rng(seed)
+ region = np.array(_REGIONS)[rng.integers(0, len(_REGIONS), n)]
+ tenure = np.where(
+ rng.random(n) < 0.7,
+ np.where(rng.random(n) < 0.5, "OWNED_OUTRIGHT", "OWNED_WITH_MORTGAGE"),
+ "RENT_PRIVATELY",
+ )
+ value = np.where(tenure != "RENT_PRIVATELY", rng.lognormal(12.5, 0.6, n), 0.0)
+ value[:4] = 0.0 # owners without a value keep it
+ tenure[:4] = "OWNED_OUTRIGHT"
+ other = rng.uniform(0, 50_000, n)
+ household = pd.DataFrame(
+ {
+ "household_id": np.arange(1, n + 1, dtype="int64"),
+ "region": pd.array(region, dtype="string"),
+ "tenure_type": pd.array(tenure, dtype="string"),
+ "main_residence_value": value,
+ "property_wealth": value + other,
+ HIGH_VALUE_SUPPORT_COPY_COLUMN: rng.random(n) < 0.05,
+ }
+ )
+ if lineage:
+ household["household_source_id"] = (
+ household["household_id"].to_numpy()
+ if source_ids is None
+ else np.asarray(source_ids, dtype="int64")
+ )
+ benunit = pd.DataFrame(
+ {
+ "benunit_id": np.arange(1, n + 1, dtype="int64"),
+ # A context cell every graph node receives.
+ "frs_benunit_capital": np.zeros(n),
+ }
+ )
+ person = pd.DataFrame(
+ {
+ "person_id": np.arange(1, n + 1, dtype="int64"),
+ "person_household_id": np.arange(1, n + 1, dtype="int64"),
+ "person_benunit_id": np.arange(1, n + 1, dtype="int64"),
+ "age": np.full(n, 50, dtype="int64"),
+ }
+ )
+ return uk_national_frame(
+ person=person,
+ benunit=benunit,
+ household=household,
+ time_period="2024",
+ weight_kind=WeightKind.DESIGN,
+ household_weights=rng.uniform(500.0, 3_000.0, n),
+ )
+
+
+def test_england_and_wales_owners_take_their_regions_distribution() -> None:
+ frame = _frame()
+ before = frame.table("household")
+ result = rhv.assign_regional_home_values(frame)
+ after = result.frame.table("household")
+ owner = property_localisation.owner_mask(before["tenure_type"].to_numpy())
+ value = before["main_residence_value"].to_numpy()
+ mapped = before["region"].isin(list(rhv.FRS_REGION_TO_KNOTS_REGION)).to_numpy()
+ target = owner & (value > 0) & mapped
+ # Untouched: renters, owners without a value, Scotland and Northern Ireland.
+ np.testing.assert_array_equal(
+ after["main_residence_value"].to_numpy()[~target], value[~target]
+ )
+ assert not np.allclose(
+ after["main_residence_value"].to_numpy()[target], value[target]
+ )
+ # The replaced value is kept for the dense node to rank on.
+ np.testing.assert_array_equal(after[rhv.RANK_BASIS_COLUMN].to_numpy(), value)
+ # Wealth moves by the value's change.
+ np.testing.assert_allclose(
+ after["property_wealth"].to_numpy(),
+ np.maximum(
+ before["property_wealth"].to_numpy()
+ + after["main_residence_value"].to_numpy()
+ - value,
+ 0.0,
+ ),
+ )
+ assert result.frame.mass_log[-1].declared_factor == 1.0
+ receipt = result.receipt
+ assert set(receipt["rows_rewritten_by_region"]) <= {
+ "E12000007",
+ "E12000001",
+ "W92000004",
+ }
+
+
+def test_values_keep_the_within_region_order() -> None:
+ frame = _frame()
+ before = frame.table("household")
+ after = rhv.assign_regional_home_values(frame).frame.table("household")
+ support = before[HIGH_VALUE_SUPPORT_COPY_COLUMN].to_numpy()
+ for region in ("LONDON", "NORTH_EAST", "WALES"):
+ rows = (
+ (before["region"] == region).to_numpy()
+ & property_localisation.owner_mask(before["tenure_type"].to_numpy())
+ & (before["main_residence_value"].to_numpy() > 0)
+ & ~support
+ )
+ old = before["main_residence_value"].to_numpy()[rows]
+ new = after["main_residence_value"].to_numpy()[rows]
+ order = np.argsort(old, kind="stable")
+ # Outside the support copies, a higher WAS value keeps a higher value.
+ assert np.all(np.diff(new[order]) >= 0)
+
+
+def test_the_wales_map_uses_the_knots_country_code() -> None:
+ assert rhv.FRS_REGION_TO_KNOTS_REGION["WALES"] == "W92000004"
+ assert "SCOTLAND" not in rhv.FRS_REGION_TO_KNOTS_REGION
+ assert "NORTHERN_IRELAND" not in rhv.FRS_REGION_TO_KNOTS_REGION
+ assert len(rhv.FRS_REGION_TO_KNOTS_REGION) == 10
+
+
+class _FrameSource(Source):
+ """The toy source kernel, returning a given frame."""
+
+ def __init__(self, frame) -> None:
+ self._frame = frame
+
+ def run(self, context):
+ return KernelResult(frame=self._frame)
+
+
+def _dense_frame(*, rank_basis=None, value=None):
+ """The toy dense source with two London owners, so a value can flip a rank."""
+
+ base = source_frame()
+ tables = {entity: base.table(entity).copy() for entity in base.entities}
+ household = tables["household"]
+ household["region"] = pd.array(
+ ["LONDON", "LONDON", "SCOTLAND", "NORTHERN_IRELAND"], dtype="string"
+ )
+ basis = np.array([400_000.0, 250_000.0, 0.0, 0.0])
+ household["main_residence_value"] = basis
+ if rank_basis is not None:
+ household[property_localisation.RANK_BASIS_COLUMN] = rank_basis
+ household["main_residence_value"] = value
+ household["property_wealth"] = household["property_wealth"] + (value - basis)
+ return Frame(
+ tables,
+ base.schema,
+ {"household": base.weights_for("household")},
+ base.strata,
+ mass_log=base.mass_log,
+ metadata=base.metadata,
+ )
+
+
+def _dense_households(frame, directory, ladder_path):
+ payloads, paths = write_toy_supports(directory / "supports")
+ resource_paths = write_toy_property_resources(directory / "property")
+ graph = append_uk_population_nodes(
+ Graph("uk", (SourceRef("fixture", "raw-bytes-v1"),), (source_node(frame),)),
+ population="source",
+ time_period="2023",
+ weight_kind="importance",
+ n_clones=1,
+ seed=7,
+ source_year=2023,
+ geography_assignment="atomic",
+ atomic_geography_definition=uk_atomic_assignment_definition(payloads, seed=7),
+ source_vintage=SOURCE_VINTAGE,
+ property_localisation_mode="price_paid",
+ )
+ registry = KernelRegistry()
+ registry.register(_FrameSource(frame))
+ registry.register(UKClaimKernel())
+ register_uk_population_kernels(registry)
+ run = run_graph(
+ compile_graph(graph),
+ sources={
+ "uk_ladder": ladder_path,
+ "fixture": ladder_path,
+ **toy_support_sources(paths),
+ **resource_paths,
+ },
+ store=ContentStore(directory / "store"),
+ kernels=registry,
+ )
+ household = run.population("uk.full.expand").table("household")
+ return household[["household_id", "main_residence_value", "property_wealth"]]
+
+
+def test_the_dense_line_does_not_move_with_the_regional_values(
+ toy_ladder, tmp_path
+) -> None:
+ _, ladder_path = toy_ladder
+ basis = np.array([400_000.0, 250_000.0, 0.0, 0.0])
+ # The regional stage swaps the two London owners' order.
+ regional = np.array([200_000.0, 500_000.0, 0.0, 0.0])
+ before = _dense_households(_dense_frame(), tmp_path / "before", ladder_path)
+ after = _dense_households(
+ _dense_frame(rank_basis=basis, value=regional), tmp_path / "after", ladder_path
+ )
+ # The value node receives the replaced value through its slice, so the
+ # dense line's values and wealth are those it had before the stage.
+ pd.testing.assert_frame_equal(
+ before.reset_index(drop=True), after.reset_index(drop=True)
+ )
+ # Ranking on the regional values instead would move them: the test is
+ # sensitive to the basis the node reads.
+ moved = _dense_households(
+ _dense_frame(rank_basis=regional, value=regional),
+ tmp_path / "moved",
+ ladder_path,
+ )
+ assert not np.allclose(
+ before["main_residence_value"].to_numpy(),
+ moved["main_residence_value"].to_numpy(),
+ )
+
+
+def test_the_rank_basis_refuses_a_declaration_mismatch() -> None:
+ household = pd.DataFrame({"main_residence_value": [1.0, 2.0]})
+ np.testing.assert_array_equal(
+ property_localisation.main_residence_rank_basis(household, declared=False),
+ [1.0, 2.0],
+ )
+ with pytest.raises(ValueError, match="declared but missing"):
+ property_localisation.main_residence_rank_basis(household, declared=True)
+ staged = household.assign(**{property_localisation.RANK_BASIS_COLUMN: [3.0, 4.0]})
+ np.testing.assert_array_equal(
+ property_localisation.main_residence_rank_basis(staged, declared=True),
+ [3.0, 4.0],
+ )
+ with pytest.raises(ValueError, match="present but undeclared"):
+ property_localisation.main_residence_rank_basis(staged, declared=False)
+
+
+def _graph_evidence(frame) -> dict:
+ """The stage's receipt from the production node, run as a graph build runs it.
+
+ The executor hands the kernel only the cells the node declares, so a
+ column the stage reads but the node does not declare is missing here.
+ """
+
+ from microcosm.build.uk_runtime.graph import uk_spine_graph
+ from microcosm.build.uk_runtime.graph_kernels import UKStageKernel
+ from microcosm.graph.executor import _project_context
+ from microcosm.graph.population import Population
+
+ name = rhv.REGIONAL_HOME_VALUES_STAGE_NAME
+ node = uk_spine_graph(source_mode="split").node(name)
+ context = _project_context(
+ node,
+ Population.from_frame(frame, "regional-home-values-input"),
+ key="0" * 64,
+ sources={},
+ tolerances={},
+ numerics={},
+ )
+ stage = load_country_spec("uk").sources.stage_map()[name]
+ transform = rhv.UKRegionalHomeValuesStageTransform(stage=stage)
+ UKStageKernel(name, transform).run(context)
+ return transform.checkpoint_metadata()["evidence"]
+
+
+def _london_copies_at_the_cap(monkeypatch):
+ """Twelve London owners, support copies of three source households, every
+ one at a cap the test lowers below all values (on the packaged knots the
+ cap lies at or above each region's top knot, which no rank below 1
+ reaches)."""
+
+ parsed, knots = rhv.load_region_knots()
+ monkeypatch.setattr(
+ rhv,
+ "load_region_knots",
+ lambda payload=None: (dataclasses.replace(parsed, cap=1.0), knots),
+ )
+ frame = _frame(n=12, seed=9, source_ids=np.arange(12) % 3)
+ household = frame.table("household")
+ household["region"] = pd.array(["LONDON"] * 12, dtype="string")
+ household["tenure_type"] = pd.array(["OWNED_OUTRIGHT"] * 12, dtype="string")
+ household["main_residence_value"] = np.linspace(300_000.0, 900_000.0, 12)
+ household["property_wealth"] = household["main_residence_value"] + 10_000.0
+ # The node's shape anchor, the preceding support stage's copy index.
+ household["high_value_support_copy_index"] = np.zeros(12, dtype="int64")
+ return frame
+
+
+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).
+ 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"
+
+
+def test_the_stage_refuses_a_frame_without_lineage() -> None:
+ with pytest.raises(ValueError, match="household_source_id"):
+ rhv.assign_regional_home_values(_frame(lineage=False))
+ # A null would drop out of the distinct count: the cap cell would read 0
+ # with rows in it.
+ frame = _frame()
+ sources = frame.table("household")["household_source_id"].astype("Int64")
+ sources.iloc[0] = None
+ frame.table("household")["household_source_id"] = sources
+ with pytest.raises(ValueError, match="null"):
+ rhv.assign_regional_home_values(frame)
+
+
+def test_the_release_drops_the_rank_basis() -> None:
+ assert rhv.RANK_BASIS_COLUMN in UK_RELEASE_EXPORT_DROPPED_COLUMNS["household"]
+
+
+def test_the_stage_refuses_a_stored_rank_basis() -> None:
+ staged = rhv.assign_regional_home_values(_frame()).frame
+ with pytest.raises(ValueError, match="already stored"):
+ rhv.assign_regional_home_values(staged)
+
+
+def test_region_knots_must_be_positive_and_increasing() -> None:
+ from importlib.resources import files
+
+ payload = json.loads(
+ files("microcosm.build.uk").joinpath(rhv.KNOTS_RESOURCE).read_text()
+ )
+ payload["levels"]["region"]["E12000007"]["quantiles"][1] = payload["levels"][
+ "region"
+ ]["E12000007"]["quantiles"][0]
+ with pytest.raises(ValueError, match="strictly increasing"):
+ rhv.load_region_knots(json.dumps(payload).encode())
+
+
+def test_the_packaged_stage_runs_after_the_support_copies() -> None:
+ stages = {stage.stage: stage for stage in load_country_spec("uk").sources.stages}
+ rhv.UKRegionalHomeValuesStageTransform(stage=stages["regional_home_values"])
+ order = list(stages)
+ position = order.index("regional_home_values")
+ assert order.index("high_value_home_support") == position - 1
+ assert position < order.index("property_components")
diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py
index ddac7f0bb..83197aaf2 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py
@@ -45,9 +45,15 @@
"was_lisa",
"regional_property_uprating",
"high_value_home_support",
+ # microcosm#1112: the regions' Land Registry home values on the spine, on
+ # the uprated values and the support copies.
+ "regional_home_values",
# #1106: landlords' receipts and finance costs follow the uprated rental
# property values their coherence receipt reads.
"property_components",
+ # microcosm#1095: annual purchases from the uprated stocks, after the
+ # support copies (uk-data#573).
+ "property_purchases",
]
E6_STAGE_NAMES = [
"nts_bus_travel",
@@ -73,6 +79,11 @@
UC_COHERENCE_STAGE_NAMES = [
"uc_capital_coherence",
]
+# microcosm#1095: the Move to UC claim draw reads the final legacy and UC
+# receipts and would_claim_uc (uk-data#534).
+UC_LEGACY_CLOSURE_TAKE_UP_STAGE_NAMES = [
+ "uc_legacy_closure_take_up",
+]
PENSION_CREDIT_TAKE_UP_STAGE_NAMES = [
"pension_credit_take_up",
]
@@ -110,6 +121,7 @@
*UC_REPORTER_REDRAW_STAGE_NAMES,
*SPI_BENEFIT_COHERENCE_STAGE_NAMES,
*UC_COHERENCE_STAGE_NAMES,
+ *UC_LEGACY_CLOSURE_TAKE_UP_STAGE_NAMES,
*PENSION_CREDIT_TAKE_UP_STAGE_NAMES,
*CHILD_BENEFIT_TAKE_UP_STAGE_NAMES,
*E9_STAGE_NAMES,
@@ -181,6 +193,7 @@ def test_e5_and_e6_follow_e7_and_precede_the_uc_rewrites(self) -> None:
*UC_REPORTER_REDRAW_STAGE_NAMES,
*SPI_BENEFIT_COHERENCE_STAGE_NAMES,
*UC_COHERENCE_STAGE_NAMES,
+ *UC_LEGACY_CLOSURE_TAKE_UP_STAGE_NAMES,
*PENSION_CREDIT_TAKE_UP_STAGE_NAMES,
*CHILD_BENEFIT_TAKE_UP_STAGE_NAMES,
*E9_STAGE_NAMES,
@@ -245,7 +258,9 @@ def test_country_stage_plan_assembles_spine_plan(self) -> None:
"nts_bus_travel": _identity,
"regional_property_uprating": _identity,
"high_value_home_support": _identity,
+ "regional_home_values": _identity,
"property_components": _identity,
+ "property_purchases": _identity,
"lcfs_consumption": _identity,
"etb_vat": _identity,
"etb_services": _identity,
@@ -257,6 +272,7 @@ def test_country_stage_plan_assembles_spine_plan(self) -> None:
"uc_reporter_redraw": _identity,
"spi_benefit_coherence": _identity,
"uc_capital_coherence": _identity,
+ "uc_legacy_closure_take_up": _identity,
"pension_credit_take_up": _identity,
"child_benefit_take_up": _identity,
"uc_deduction_attributes": _identity,
diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_spine_acceptance_receipt.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_spine_acceptance_receipt.py
index f3e43cf40..0c788ac62 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_spine_acceptance_receipt.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_spine_acceptance_receipt.py
@@ -117,10 +117,24 @@ def _apply_pending_roster_transformations(
# follow the uprated rental property values.
assert "property_components" not in roster
roster.insert(roster.index("high_value_home_support") + 1, "property_components")
+ # microcosm#1112 re-mint pending: the regions' home values replace the
+ # owners' values after the support copies, before the components.
+ assert "regional_home_values" not in roster
+ roster.insert(roster.index("high_value_home_support") + 1, "regional_home_values")
+ # microcosm#1095 re-mint pending: the annual property purchases read the
+ # uprated stocks after the support copies (uk-data#573).
+ assert "property_purchases" not in roster
+ roster.insert(roster.index("property_components") + 1, "property_purchases")
# microcosm#1069 re-mint pending: the Pension Credit take-up redraw reads
# the post-SPI incomes, so it runs right after UC capital coherence.
assert "pension_credit_take_up" not in roster
roster.insert(roster.index("uc_capital_coherence") + 1, "pension_credit_take_up")
+ # microcosm#1095 re-mint pending: the Move to UC claim draw reads the final
+ # legacy and UC receipts, after UC capital coherence (uk-data#534).
+ assert "uc_legacy_closure_take_up" not in roster
+ roster.insert(
+ roster.index("uc_capital_coherence") + 1, "uc_legacy_closure_take_up"
+ )
# microcosm#1063 re-mint pending: the Child Benefit redraw reads the same
# post-SPI incomes, right after the Pension Credit redraw.
assert "child_benefit_take_up" not in roster
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 8034ea85c..024d24970 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
@@ -319,6 +319,7 @@ def test_uk_target_references_follow_contract_derivation_rules() -> None:
"latest_plateau",
"count_x_mean",
"calendar_year_window",
+ "calendar_year_window_scaled_by_ratio",
"linear_combination",
"monthly_window_average",
"monthly_window_count_x_mean",
@@ -1043,9 +1044,13 @@ def test_uk_target_reference_membership_report_is_packaged() -> None:
"uk/high_value_home_stock_facts.json (microcosm#1240). Each row "
"is the cross-grain control for its area cells. They bind on "
"the local line only (calibration_lines): the national line "
- "and the release-cut certifier drop them after the compile, "
- "since the national spine's main_residence_value is the WAS "
- "donor's, not a Land Registry placement (microcosm#1301)."
+ "and the release-cut certifier drop them after the compile "
+ "(microcosm#1301). Since microcosm#1095 the national spine "
+ "reads main_residence_value off the regions' Land Registry "
+ "knots too, but binding the rows there would move the "
+ "national registry and solve while the knots' tails still "
+ "place more homes in the top bands than the derived stock "
+ "(microcosm#1112)."
),
},
{
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 21c97ea32..6ff8055dc 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
@@ -419,12 +419,14 @@ def test_export_candidate_columns_strip_ids_and_carry_the_weight() -> None:
assert exported.weights_for("household").values.tolist() == [1.0, 2.0]
assert exported.mass_log == frame.mass_log
# The boundary drops the reviewed export exclusions, the internal
- # disability carriers, the salary-sacrifice pre-conversion pay carrier
- # and the landlord carrier, and nothing else.
+ # disability carriers, the salary-sacrifice pre-conversion pay carrier,
+ # the landlord carrier and the value the regional home values replaced
+ # (microcosm#1112), and nothing else.
from microcosm.build.uk_runtime.frs_disability import (
UK_INTERNAL_DISABILITY_REPORTED_COLUMNS,
)
from microcosm.build.uk_runtime.frs_spine import FRS_LANDLORD_CARRIER_COLUMN
+ from microcosm.build.uk_runtime.property_localisation import RANK_BASIS_COLUMN
from microcosm.build.uk_runtime.salary_sacrifice import (
SALSAC_PRE_CONVERSION_PAY_COLUMN,
)
@@ -439,6 +441,7 @@ def test_export_candidate_columns_strip_ids_and_carry_the_weight() -> None:
| {f"person.{column}" for column in UK_INTERNAL_DISABILITY_REPORTED_COLUMNS}
| {f"person.{SALSAC_PRE_CONVERSION_PAY_COLUMN}"}
| {f"person.{FRS_LANDLORD_CARRIER_COLUMN}"}
+ | {f"household.{RANK_BASIS_COLUMN}"}
)
# A frame without the column passes through untouched.
assert uk_release_export_frame(exported) is exported
diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_capital_coherence.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_capital_coherence.py
index f35d06b77..07920245a 100644
--- a/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_capital_coherence.py
+++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_uc_capital_coherence.py
@@ -63,12 +63,14 @@ def test_stage_orders_after_every_universal_credit_report_writer() -> None:
assert reporter_writers
assert all(index < coherence_index for index, _ in reporter_writers)
- # The Pension Credit take-up redraw (microcosm#1069 c7) and the Child
- # Benefit redraw (microcosm#1063 c8) sit between the coherence stage and
- # the deduction attributes; neither writes a UC report.
+ # The Move to UC claim draw (microcosm#1095), the Pension Credit take-up
+ # redraw (microcosm#1069 c7) and the Child Benefit redraw (microcosm#1063
+ # c8) sit between the coherence stage and the deduction attributes; none
+ # writes a UC report.
assert [
- stage.stage for stage in stages[coherence_index + 1 : coherence_index + 4]
+ stage.stage for stage in stages[coherence_index + 1 : coherence_index + 5]
] == [
+ "uc_legacy_closure_take_up",
"pension_credit_take_up",
"child_benefit_take_up",
"uc_deduction_attributes",
diff --git a/packages/microcosm-data/pyproject.toml b/packages/microcosm-data/pyproject.toml
index 466c74a04..d036f9227 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.132.6"]
+uk = ["policyengine-uk>=2.134.4"]
[project.urls]
Homepage = "https://microcosm.institute"
diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py
index 38f8118a4..02d6889bd 100644
--- a/packages/microcosm-data/src/microcosm/data/contract.py
+++ b/packages/microcosm-data/src/microcosm/data/contract.py
@@ -447,13 +447,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 = (
- "1e6c3da7cba654da5b0244affa6f2696369ced8464cc47d831e37f5c9fd76377"
+ "921806343e97f2ce2cc246cd417fd8a3ca2b69110e42d2c2877814e3e6477eb2"
)
_UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = (
- "3efc24780ea8e3961f36ee526de69048ed2198285e738a65d82f0fda13080cd1"
+ "c354c874a2d3b6801b04b4cf4e186384c3da5e3382f6b61d2a56638e3b0efdab"
)
_UK_GATE_BATTERY_SPEC_FINGERPRINT = (
- "1a6e57d5e889f4c62297c283a041a917dcaa025dce129eee38ae126ffcb37233"
+ "aac722c4e22ad8ea2c5b055669e8e7647d712cf1eda0377752dd9ba6598b0b64"
)
#: Spec entry id -> the legacy gate name whose observable detail checks
#: apply unchanged (the battery re-keys the report by entry id; the gate
@@ -939,10 +939,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None:
},
"release_cut": {
"gates_manifest_sha256": (
- "778e1a26f58b2f1347c0438321117da905e6ff1f5902468c1fe24a186cd5b891"
+ "3c876c1d8927a5b31b1a3373ee6ea09c005322838efff967d7148531caf05594"
),
"policy_sha256": (
- "3a1dd5dfae4cd52de9d71f3f3542e67758c5e73862fde88b0b97e040d5d46396"
+ "939309226c43641ded9402ab47b7b12b0c46fa5165f73da5ced9d97a38985d02"
),
},
}
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 98510cca0..76cef197c 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 = (
- "1e6c3da7cba654da5b0244affa6f2696369ced8464cc47d831e37f5c9fd76377"
+ "921806343e97f2ce2cc246cd417fd8a3ca2b69110e42d2c2877814e3e6477eb2"
)
UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = (
- "3efc24780ea8e3961f36ee526de69048ed2198285e738a65d82f0fda13080cd1"
+ "c354c874a2d3b6801b04b4cf4e186384c3da5e3382f6b61d2a56638e3b0efdab"
)
UK_GATE_BATTERY_SPEC_FINGERPRINT = (
- "1a6e57d5e889f4c62297c283a041a917dcaa025dce129eee38ae126ffcb37233"
+ "aac722c4e22ad8ea2c5b055669e8e7647d712cf1eda0377752dd9ba6598b0b64"
)
UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = (
"6a179222c6b6058ad9caacfd347f7bdb8cb98a62237b50d1fc1136df09337251"
diff --git a/packages/microcosm-frame/pyproject.toml b/packages/microcosm-frame/pyproject.toml
index 6933b76e2..05e5a2eb6 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.132.6"]
+uk = ["policyengine-uk>=2.134.4"]
# 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 4f0fc157b..807f5b496 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
@@ -32,7 +32,7 @@
# ---------------------------------------------------------------------------
#
# Which PolicyEngine-UK inputs each engine-neutral concept feeds
-# (microcosm.frame.concepts), reviewed against policyengine-uk 2.132.6. Every
+# (microcosm.frame.concepts), reviewed against policyengine-uk 2.134.4. 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``);
@@ -59,6 +59,7 @@
"targeted_childcare",
"tfc",
"uc",
+ "uc_at_legacy_closure",
"uc_childcare",
"universal_childcare",
)
@@ -150,6 +151,17 @@
"stochastic_assignment.py); a threshold alone has neither the anchor "
"nor the population.",
),
+ "uc_at_legacy_closure": (
+ "Whether this family would claim Universal Credit once a legacy "
+ "means-tested benefit it receives closes (legacy_benefits_closed). "
+ "Datasets draw it at DWP's Move to Universal Credit claim rates by "
+ "legacy benefit combination. ...",
+ "The UK build draws it at DWP's Move to Universal Credit claim rates "
+ "for each combination of legacy benefits, net of the units that "
+ "would claim anyway, among units reporting a legacy benefit and not "
+ "Universal Credit (legacy_closure_take_up.py, microcosm#1095); a "
+ "threshold alone has neither the combinations nor the population.",
+ ),
"uc_childcare": (
"Whether this family would claim the Universal Credit childcare element "
"if entitled. Generated stochastically in a dataset from take-up rates "
@@ -165,18 +177,10 @@
#: Take-up inputs of the engine the build leaves at the engine's default,
-#: with why. ``would_claim_uc_at_legacy_closure`` (policyengine-uk 2.128.0,
-#: pe-uk#2119) says whether a family DWP moves off a legacy benefit claims
-#: Universal Credit; the default is that every such family does. uk-data#534
-#: draws it at DWP's Move to UC claim rates, which are not yet a Chronicle
-#: fact (microcosm#1095).
-UK_ENGINE_DEFAULT_TAKE_UP_INPUTS: dict[str, str] = {
- "would_claim_uc_at_legacy_closure": (
- "Left at the engine's default (true): every family moved off a legacy "
- "benefit claims Universal Credit. DWP's Move to UC claim rates, which "
- "uk-data#534 draws it at, are not yet a Chronicle fact (microcosm#1095)."
- ),
-}
+#: with why. None today: ``would_claim_uc_at_legacy_closure``
+#: (policyengine-uk 2.128.0, pe-uk#2119), the last of them, is drawn at DWP's
+#: Move to UC claim rates since they became a Chronicle fact (microcosm#1095).
+UK_ENGINE_DEFAULT_TAKE_UP_INPUTS: dict[str, str] = {}
def _uk_take_up(program: str, entity: str) -> InputBinding:
@@ -200,7 +204,7 @@ def _uk_take_up(program: str, entity: str) -> InputBinding:
POLICYENGINE_UK_CONCEPT_MAPPING = ConceptMapping(
engine="policyengine-uk",
- engine_version="2.132.6",
+ engine_version="2.134.4",
entity_correspondence={"person": "person", "household": "household"},
input_declaration=InputDeclaration.ENGINE_TYPED,
bindings=(
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 8bfeb479a..540c2de74 100644
--- a/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json
+++ b/packages/microcosm-frame/tests/golden/concept-coverage/policyengine-uk.json
@@ -215,6 +215,10 @@
"entity": "benunit",
"name": "would_claim_uc"
},
+ {
+ "entity": "benunit",
+ "name": "would_claim_uc_at_legacy_closure"
+ },
{
"entity": "benunit",
"name": "would_claim_uc_childcare"
@@ -237,7 +241,7 @@
}
]
},
- "covered_count": 41,
+ "covered_count": 42,
"covered_inputs": [
{
"entity": "person",
@@ -395,6 +399,10 @@
"entity": "benunit",
"name": "would_claim_uc"
},
+ {
+ "entity": "benunit",
+ "name": "would_claim_uc_at_legacy_closure"
+ },
{
"entity": "benunit",
"name": "would_claim_uc_childcare"
@@ -405,8 +413,8 @@
}
],
"engine": "policyengine-uk",
- "engine_version": "2.132.6",
- "input_count": 300,
+ "engine_version": "2.134.4",
+ "input_count": 302,
"schema_sha256": "5a55669d0447a686692911a6327ae298f19741dde29559f2654a75807878a141",
"structural_inputs": [
{
@@ -471,6 +479,10 @@
"entity": "household",
"name": "accommodation_type"
},
+ {
+ "entity": "household",
+ "name": "additional_residential_property_purchased"
+ },
{
"entity": "person",
"name": "admitted_patient_visits"
@@ -1039,6 +1051,10 @@
"entity": "person",
"name": "ni_class_3"
},
+ {
+ "entity": "household",
+ "name": "non_residential_property_purchased"
+ },
{
"entity": "household",
"name": "non_residential_property_value"
@@ -1439,10 +1455,6 @@
"entity": "benunit",
"name": "working_tax_credit_run_on"
},
- {
- "entity": "benunit",
- "name": "would_claim_uc_at_legacy_closure"
- },
{
"entity": "household",
"name": "would_evade_tv_licence_fee"
diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_asset_type_facts.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_asset_type_facts.json
index 613c03e24..e64ed3150 100644
--- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_asset_type_facts.json
+++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_asset_type_facts.json
@@ -2,70 +2,70 @@
"resource": "synthetic-cgt-asset-type.json",
"resource_sha256": "synthetic",
"source_commit": "synthetic",
- "table4_all_gains": 6492650.423955843,
+ "table4_all_gains": 6341734.724429999,
"table4_all_tax": 0.0,
- "table4_all_taxpayers": 15.56124747987893,
+ "table4_all_taxpayers": 15.640250289891858,
"table4_bands": [
{
- "gains": 5353.605308331787,
+ "gains": 5614.755055308437,
"lower_bound": 0,
"tax": null,
- "taxpayers": 1.3551306505826561,
+ "taxpayers": 1.449861041223704,
"upper_bound": 10000
},
{
- "gains": 24683.340670393227,
+ "gains": 27080.12160600845,
"lower_bound": 10000,
"tax": null,
- "taxpayers": 1.3786932920051185,
+ "taxpayers": 1.5144705021656795,
"upper_bound": 25000
},
{
- "gains": 84332.55231110852,
+ "gains": 76331.17900319055,
"lower_bound": 25000,
"tax": null,
- "taxpayers": 2.323766819273882,
+ "taxpayers": 2.1412992924367082,
"upper_bound": 50000
},
{
- "gains": 154213.31481636307,
+ "gains": 157905.09467308622,
"lower_bound": 50000,
"tax": null,
- "taxpayers": 2.1078867573915008,
+ "taxpayers": 2.1780392870465786,
"upper_bound": 100000
},
{
- "gains": 138484.83817406252,
+ "gains": 155213.69791341943,
"lower_bound": 100000,
"tax": null,
- "taxpayers": 0.8780827922829209,
+ "taxpayers": 0.9562896654807813,
"upper_bound": 250000
},
{
- "gains": 599393.2291901679,
+ "gains": 604360.2751651776,
"lower_bound": 250000,
"tax": null,
- "taxpayers": 1.7311343090482085,
+ "taxpayers": 1.7593341344988387,
"upper_bound": 500000
},
{
- "gains": 707496.8496493298,
+ "gains": 754806.8460223324,
"lower_bound": 500000,
"tax": null,
- "taxpayers": 1.0078601654585555,
+ "taxpayers": 1.080533612048092,
"upper_bound": 1000000
},
{
- "gains": 4778692.693836086,
+ "gains": 4560422.7549914755,
"lower_bound": 1000000,
"tax": null,
- "taxpayers": 4.778692693836087,
+ "taxpayers": 4.5604227549914755,
"upper_bound": null
}
],
- "table4_individuals_gains": 6492650.423955843,
+ "table4_individuals_gains": 6341734.724429999,
"table4_individuals_tax": 0.0,
- "table4_individuals_taxpayers": 15.56124747987893,
+ "table4_individuals_taxpayers": 15.640250289891858,
"table4_trusts_gains": 0.0,
"table4_trusts_tax": 0.0,
"table7_total_disposals": 2743095.2380952383,
@@ -114,12 +114,12 @@
"proceeds": 9000000000.0
}
],
- "table8a_disposals_total": 29.344066676343125,
- "table8a_gains_total": 35682972.13817826,
- "table8a_tax_total": 7136594.427635652,
- "table8a_taxpayers_total": 26.67642425122102,
- "table8b_all_gains": 35682972.13817826,
- "table8b_all_taxpayers": 26.67642425122102,
- "table8b_individuals_gains": 35682972.13817826,
- "table8b_individuals_taxpayers": 26.67642425122102
+ "table8a_disposals_total": 29.493043403796086,
+ "table8a_gains_total": 36452887.05650567,
+ "table8a_tax_total": 7290577.411301135,
+ "table8a_taxpayers_total": 26.811857639814622,
+ "table8b_all_gains": 36452887.05650567,
+ "table8b_all_taxpayers": 26.811857639814622,
+ "table8b_individuals_gains": 36452887.05650567,
+ "table8b_individuals_taxpayers": 26.811857639814622
}
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 08cbb1887..c2044578f 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
@@ -33,6 +33,7 @@
"nts_stage": "nts_stage.csv",
"nts_ticket": "nts_ticket.csv",
"nts_trip": "nts_trip.csv",
+ "property_purchase_targets": "property_purchase_targets.json",
"property_rental_facts": "property_rental_facts.json",
"spi_donor": "spi_donor.csv",
"was": "was.csv",
@@ -253,7 +254,7 @@
"cgt_residential_split": {
"artifacts": [
{
- "dependency": "policyengine-uk>=2.132.6 via microcosm-build[uk]",
+ "dependency": "policyengine-uk>=2.134.4 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",
@@ -2215,7 +2216,7 @@
"nonnegative_outputs": [
"maximum_extended_childcare_hours_usage"
],
- "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.132.6'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).",
+ "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.134.4'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).",
"operations": [
{
"aggregates": {
@@ -2373,7 +2374,7 @@
"hmrc_cgt_asset_type_spine": {
"artifacts": [
{
- "dependency": "policyengine-uk>=2.132.6 via microcosm-build[uk]",
+ "dependency": "policyengine-uk>=2.134.4 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",
@@ -4982,6 +4983,168 @@
"stage": "property_components",
"survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)"
},
+ "property_purchases": {
+ "artifacts": [
+ {
+ "format": "json",
+ "kind": "public_aggregate_reference",
+ "resource": "hmrc_stamp_tax_facts.json",
+ "role": "stamp_tax_facts",
+ "runtime_sha256_required": true
+ }
+ ],
+ "grain": "household",
+ "nonnegative_outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "notes": "Ports uk-data#573 (a draft, at 07f6b460f; uk-data#556) at the spine's design weights, after the regional uprating and the high-value support copies, so every copy draws on its own (microcosm#1095). policyengine-uk 2.134.1 (pe-uk#2241) makes both purchases inputs that default to nil, so without them a purchasing household pays SDLT on its main home only. A household whose stock of a kind is at least HMRC's GBP 40,000 coverage floor, at positive weight, can buy once a year. The purchase hazard is proportional to the stock over the weighted mean eligible stock in England and Northern Ireland, where SDLT applies; each household's exponential event score reads its own identity-keyed uniform, and the threshold whose weighted count of England-and-Northern-Ireland purchasers is closest to HMRC's transactions applies everywhere, Scotland and Wales included, which have no target here. Prices are band means drawn at HMRC's band shares on a second identity-keyed stream, times one scale bisected so the weighted England-and-Northern-Ireland value equals HMRC's, never below GBP 40,000 and never above the stock. Where the purchasers' stock cannot carry HMRC's value, as for non-residential property on the national spine, every purchaser buys at its stock and the receipt records the shortfall, and the stage refuses below 80% of the value; uk-data#573 refuses any shortfall (Mar\u00eda's ruling of 2026-10-16). Targets, vendored from the pinned Chronicle feed: additional dwellings are Table 6b's 2024-25 HRAD transactions and value (every buyer) times individuals' shares of Table 8a's residential transactions and value, with Table 6b's bands and the five above GBP 2m combined; non-residential purchases are Table 8b's 2024-25 individuals. The stage fits transactions and value only; households' SDLT is fitted through obr.sdlt. The HRAD allocation is an assumption, as uk-data#573 says (its household lower bounds are 87,200 transactions and GBP 33.28bn), and probably overstates households' purchases. The draws differ from uk-data's, which read positional seeded streams; the method is the same.",
+ "operations": [
+ {
+ "artifact_role": "stamp_tax_facts",
+ "fail_on_mismatch": true,
+ "feed_pin": "chronicle_feed.json",
+ "kind": "verify_vendored_fact_resource",
+ "mapped_build_period": 2024,
+ "period_mapping": "published_tax_year_equals_build_period",
+ "record_sets": [
+ "hmrc.stamp_taxes_2024_25.table_6b.hrad.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8a.individuals.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8a.other_buyers.fy2024",
+ "hmrc.stamp_taxes_2024_25.table_8b.individuals.fy2024"
+ ],
+ "require_before_source_read": true,
+ "resource": "hmrc_stamp_tax_facts.json",
+ "runtime_sha256_required": true,
+ "source_vintage": "2024-25"
+ },
+ {
+ "additional_residential_targets": "Table 6b HRAD transactions and value, 2024-25, times individuals' shares of Table 8a residential transactions and value; Table 6b bands with the five above GBP 2m combined",
+ "eligibility": "stock at least minimum_price, the chargeable consideration HMRC's Stamp Tax tables cover, and positive weight; at most one purchase of each kind a year",
+ "event_score": "-log1p(-u) / hazard",
+ "fit_regions": [
+ "NORTH_EAST",
+ "NORTH_WEST",
+ "YORKSHIRE",
+ "EAST_MIDLANDS",
+ "WEST_MIDLANDS",
+ "EAST_OF_ENGLAND",
+ "LONDON",
+ "SOUTH_EAST",
+ "SOUTH_WEST",
+ "NORTHERN_IRELAND"
+ ],
+ "hazard": "(max(stock, minimum) / weighted mean eligible stock) ** 1",
+ "kind": "impute_annual_property_purchases",
+ "minimum_price": 40000,
+ "minimum_value_share": 0.8,
+ "non_residential_targets": "Table 8b individuals' transactions, value and bands, 2024-25",
+ "outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "port_of": "uk-data#573 at 07f6b460f",
+ "price": "min(stock, max(minimum, scale * band mean)), band drawn at the band shares, scale bisected to the value target; where the purchasers' stock cannot carry the value, every purchaser buys at its stock and the shortfall is recorded",
+ "stocks": [
+ "other_residential_property_value",
+ "non_residential_property_value"
+ ],
+ "streams": {
+ "additional_residential_property_purchased": {
+ "event_salt": "additional_residential_property_purchased",
+ "price_salt": "additional_residential_property_purchased_price",
+ "seed": 0
+ },
+ "non_residential_property_purchased": {
+ "event_salt": "non_residential_property_purchased",
+ "price_salt": "non_residential_property_purchased_price",
+ "seed": 0
+ }
+ },
+ "threshold": "the score threshold whose weighted count of purchasers in the fit regions is closest to the transactions target, applied everywhere",
+ "weights": "spine_design_weights"
+ },
+ {
+ "declared_factor": 1,
+ "entity": "household",
+ "gate_coupling": "The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason.",
+ "kind": "record_mass_conservation_receipt",
+ "reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved."
+ }
+ ],
+ "outputs": [
+ "additional_residential_property_purchased",
+ "non_residential_property_purchased"
+ ],
+ "rewrites": [],
+ "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics",
+ "stage": "property_purchases",
+ "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b"
+ },
+ "regional_home_values": {
+ "artifacts": [
+ {
+ "format": "json",
+ "kind": "public_aggregate_reference",
+ "resource": "high_value_home_value_knots.json",
+ "role": "value_knots",
+ "runtime_sha256_required": true
+ }
+ ],
+ "grain": "household",
+ "nonnegative_outputs": [
+ "main_residence_value_rank_basis"
+ ],
+ "notes": "The national line's home values (microcosm#1112, microcosm#1095). The national release solves the bound spine, which has no area, so main_residence_value stayed the WAS-imputed value after the regional uprating, not a Land Registry value; the dense line reads values off the assigned constituency's distribution only after areas exist (uk.full.property.value, microcosm#1240). This stage gives every England-and-Wales owner household with a value the one its region's uprated Land Registry distribution holds at the household's weighted mid-rank among the owner households of its FRS region, at the spine's weights, ranked as the dense node ranks (ties broken by a keyed draw; the high-value support copies spread over the top stratum by their own draws), and moves property_wealth by the change. Scotland, Northern Ireland, renters and owners without a value keep theirs, and the council-tax band is untouched. The replaced value is kept in main_residence_value_rank_basis, which the dense node ranks on, so the dense line's values, wealth and bands do not change; the release boundary drops it on both lines. The value reaches three national rows: obr.sdlt through the main-home purchase value, and ons.land.land_value and ons.land.household_land_value through property_wealth and the engine's land intensity; corporate land value does not move. The region knots run up to each region's largest sale and down to its smallest, as the dense line's constituency knots do, so the national line places more homes in the top surcharge bands than the derived stock facts; the tails are to be fixed on both lines together (#1112, Mar\u00eda's ruling of 2026-10-17).",
+ "operations": [
+ {
+ "kind": "assign_regional_home_values",
+ "knots": "high_value_home_value_knots.json",
+ "knots_level": "region",
+ "property_wealth": "moves by the value's change, floored at 0",
+ "rank": "weighted mid-rank of main_residence_value among the owner households of the FRS region at the spine's weights, ties broken by a keyed draw; high-value support copies take support_stratum_lower + (1 - support_stratum_lower) * draw",
+ "rank_basis_column": "main_residence_value_rank_basis",
+ "region_map": {
+ "EAST_MIDLANDS": "E12000004",
+ "EAST_OF_ENGLAND": "E12000006",
+ "LONDON": "E12000007",
+ "NORTH_EAST": "E12000001",
+ "NORTH_WEST": "E12000002",
+ "SOUTH_EAST": "E12000008",
+ "SOUTH_WEST": "E12000009",
+ "WALES": "W92000004",
+ "WEST_MIDLANDS": "E12000005",
+ "YORKSHIRE": "E12000003"
+ },
+ "rows": "owner households (tenure owned outright or with a mortgage) with main_residence_value > 0 in the mapped regions",
+ "stream": [
+ "sha256-u53-v1",
+ "uk-spine-regional-home-values-v1",
+ 0,
+ 0
+ ],
+ "support_stratum_lower": 0.95,
+ "value": "np.interp(rank, grid, region knots)"
+ },
+ {
+ "declared_factor": 1,
+ "entity": "household",
+ "gate_coupling": "The terminal family gate requires a valid mass-conserving MassChangeRecord carrying exactly this stage-specific reason.",
+ "kind": "record_mass_conservation_receipt",
+ "reason": "Regional home values assigned on the source spine: household weights pass through unchanged and total household mass is conserved."
+ }
+ ],
+ "outputs": [
+ "main_residence_value_rank_basis"
+ ],
+ "rewrites": [
+ "main_residence_value",
+ "property_wealth"
+ ],
+ "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations",
+ "stage": "regional_home_values",
+ "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)"
+ },
"regional_property_uprating": {
"artifacts": [
{
@@ -5549,7 +5712,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.132.6 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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.",
+ "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.134.4 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's proxies share household capital over every claimant or partner instead, which puts a parent's property on an adult child's claim; they apply only to a unit on the unavailable sentinel. The property counts at 90% of its value, market value less 10% for the costs of sale (UC Regs 2013 reg 49; SPC Regs 2002 reg 19); debt secured on it is not on the frame and is not netted (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.",
"operations": [
{
"aggregates": {
@@ -5682,6 +5845,66 @@
"stage": "uc_deduction_attributes",
"survey": "DWP Universal Credit deductions statistics, March 2025 to February 2026"
},
+ "uc_legacy_closure_take_up": {
+ "artifacts": [
+ {
+ "format": "json",
+ "kind": "public_aggregate_reference",
+ "resource": "dwp_move_to_uc_facts.json",
+ "role": "move_to_uc_facts",
+ "runtime_sha256_required": true
+ }
+ ],
+ "grain": "benunit",
+ "nonnegative_outputs": [],
+ "notes": "Ports uk-data#534 (a draft, at c67077a66; uk-data#492) at the spine's design weights (microcosm#1095). policyengine-uk 2.128.0 (pe-uk#2119) moves a family off a legacy benefit DWP has closed (tax credits from 2025-26) and takes its other legacy awards away; the family then claims Universal Credit if would_claim_uc or would_claim_uc_at_legacy_closure is true, and the engine's default for the second, true, put every such family on Universal Credit. The stage runs after uc_capital_coherence, the last writer of would_claim_uc and universal_credit_reported, and before pension_credit_take_up and CGT cloning, so every SPI benefit unit draws on its own final receipts and every clone carries its source's draw. A benefit unit with a member reporting Universal Credit, a unit whose would_claim_uc is true, and a unit reporting none of the six legacy means-tested benefits (child_tax_credit, working_tax_credit, housing_benefit, esa_income, income_support and jsa_income, each read as a member's _reported above 0) is true, the engine's default. Every other unit is drawn at (r - p) / (1 - p), clipped to [0, 1], where r is DWP's claimed / (claimed + did not claim) for the unit's combination of legacy benefits (the all-households rate where DWP reports none; households still in progress are left out) and p is the combination's share of Great Britain's such units whose would_claim_uc is true, at the stage's household weights mapped to benefit units (uk-data#534's p is unweighted, as its draw precedes calibration; Mar\u00eda's rulings of 2026-10-16 and 2026-10-17); the probability applies to the combination's units in Northern Ireland too, since DWP's rates cover Great Britain. So, in expectation, the weighted share of Great Britain's drawn units claiming at the closure in each combination is DWP's rate wherever p is at most r; where p exceeds it the probability is 0 and the receipt flags the combination (rate_unreachable), never p itself. Two limits carry over from uk-data#534. The drawn cohort includes units on the Pension Credit route, whose legacy benefits policyengine-uk does not close, and DWP's rates count every household sent a notice, entitled to Universal Credit or not. The uniform reads an identity-keyed stream on benunit_id.",
+ "operations": [
+ {
+ "artifact_role": "move_to_uc_facts",
+ "fail_on_mismatch": true,
+ "feed_pin": "chronicle_feed.json",
+ "kind": "verify_vendored_fact_resource",
+ "mapped_build_period": 2024,
+ "period_mapping": "cumulative_claim_rates_applied_at_every_closure",
+ "record_sets": [
+ "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06",
+ "dwp.statx.mtuc_households.legacy_benefit_move_status.2026-06.total"
+ ],
+ "require_before_source_read": true,
+ "resource": "dwp_move_to_uc_facts.json",
+ "runtime_sha256_required": true,
+ "source_vintage": "July 2022 to June 2026"
+ },
+ {
+ "kind": "draw_uc_claim_at_legacy_closure",
+ "legacy_benefits": [
+ "child_tax_credit",
+ "working_tax_credit",
+ "housing_benefit",
+ "esa_income",
+ "income_support",
+ "jsa_income"
+ ],
+ "output": "would_claim_uc_at_legacy_closure",
+ "p": "the combination's weighted share of Great Britain's drawn units with would_claim_uc true, at the spine's design weights; the probability applies in Northern Ireland too",
+ "port_of": "uk-data#534 at c67077a66",
+ "probability": "clip((rate - p) / (1 - p), 0, 1)",
+ "rate": "claimed / (claimed + did not claim) for the combination, the all-households rate where DWP reports none",
+ "stream": {
+ "salt": "would_claim_uc_at_legacy_closure",
+ "seed": 0
+ },
+ "true_without_draw": "a member reports universal_credit_reported, would_claim_uc is true, or no member reports a legacy benefit"
+ }
+ ],
+ "outputs": [
+ "would_claim_uc_at_legacy_closure"
+ ],
+ "rewrites": [],
+ "source": "https://stat-xplore.dwp.gov.uk",
+ "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"
+ },
"uc_reporter_redraw": {
"artifacts": [],
"grain": "benunit",
diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/property_purchase_targets.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/property_purchase_targets.json
new file mode 100644
index 000000000..f46888b57
--- /dev/null
+++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/property_purchase_targets.json
@@ -0,0 +1,63 @@
+{
+ "additional_residential": {
+ "band_ids": [
+ "gbp_250k_or_less",
+ "gbp_250k_to_500k",
+ "gbp_500k_to_1m",
+ "gbp_1m_to_1_5m",
+ "gbp_1_5m_to_2m",
+ "over_gbp_2m"
+ ],
+ "band_transactions": [
+ 60.0,
+ 30.0,
+ 14.0,
+ 3.0,
+ 2.0,
+ 1.0
+ ],
+ "band_values": [
+ 90000.0,
+ 90000.0,
+ 84000.0,
+ 33000.0,
+ 30000.0,
+ 40000.0
+ ],
+ "minimum_price": 1000.0,
+ "property_type": "additional_residential",
+ "transactions": 26.999194565555904,
+ "value": 204508.05790306703
+ },
+ "derivation": {},
+ "non_residential": {
+ "band_ids": [
+ "gbp_250k_or_less",
+ "gbp_250k_to_500k",
+ "gbp_500k_to_1m",
+ "gbp_1m_to_1_5m",
+ "gbp_1_5m_to_2m",
+ "over_gbp_2m"
+ ],
+ "band_transactions": [
+ 60.0,
+ 30.0,
+ 14.0,
+ 3.0,
+ 2.0,
+ 1.0
+ ],
+ "band_values": [
+ 90000.0,
+ 90000.0,
+ 84000.0,
+ 33000.0,
+ 30000.0,
+ 40000.0
+ ],
+ "minimum_price": 1000.0,
+ "property_type": "non_residential",
+ "transactions": 9.653686298356586,
+ "value": 122568.16771002862
+ }
+}
diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/was.csv b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/was.csv
index e48820d50..d1b8094d7 100644
--- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/was.csv
+++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/was.csv
@@ -1,65 +1,65 @@
CASER8,DVFLISAVR8_aggr,R8xshhwgt,DVLUKValR8_sum,DVPropertyR8,DVFESHARESR8_aggr,DVFShUKVR8_aggr,DVIISAVR8_aggR,DVCISAVR8_aggr,DVFCollVR8_aggr,totalpenr8_aggr,dvvaldbt_scaper8_aggr,NumAdultR8,NumChildR8,DVGIPPENR8_AGGR,DVGISER8_AGGR,DVGIINVR8_aggr,DVGIEMPR8_AGGR,HBedRmR8,GORR8,DVPriRntR8,DVCTaxAmtAnnualR8,DVNetRentAmtAnnualR8_aggr,HFINWNTR8_Sum,HFINWNTR8_exSLC_Sum,HMortGR8,TotMortR8,OthMortR8_sum,Ten1R8,HFINWR8_SUM,DVhvalueR8,DVHseValR8_sum,DVBltValR8_sum,DVBlDValR8_sum,DVTotinc_bhcR8,DVSaValR8_aggr,vcarnr8,Tot_LosR8_aggr,Tot_los_exc_SLCR8_aggr
-1,5,1,10,104510,1,3,5,7,9,100,40,1,0,11,13,15,17,1,8,-9,900,2000,555,555,2000,0,2000,1,555,100000,1000,0,3000,20000,500,0,9000,9000
+1,5,1,10,104510,1,3,5,7,9,100,40,1,0,11,13,15,17,1,8,-9,900,0,555,555,2000,0,2000,1,555,100000,1000,0,3000,20000,500,0,9000,9000
2,0,1.1000000000000001,0,142500,2,4,6,8,10,110,41,2,1,12,14,16,18,2,11,-9,910,2040,-4464,541,10100,10100,0,2,581,102000,0,40500,0,21000,520,1,14015,9010
3,0,1.2,0,104000,3,5,7,9,11,120,42,3,2,13,15,17,19,3,12,-9,920,0,527,527,10200,10200,0,3,607,104000,0,0,0,22000,540,2,9020,9020
-4,0,1.3,0,1150,4,6,8,10,12,130,43,1,0,14,16,18,20,4,1,1,930,2120,513,513,0,0,0,4,633,0,1150,0,0,23000,560,3,9030,9030
+4,0,1.3,0,1150,4,6,8,10,12,130,43,1,0,14,16,18,20,4,1,1,930,0,513,513,0,0,0,4,633,0,1150,0,0,23000,560,3,9030,9030
5,0,1.3999999999999999,0,3240,5,7,9,11,13,140,44,2,1,15,17,19,21,5,8,2,940,0,-4521,499,0,0,0,4,659,0,0,0,3240,24000,580,0,14060,9040
6,10,1.5,15,15,6,8,10,12,14,150,45,3,2,16,18,20,22,1,11,1,950,0,685,685,0,0,0,5,685,0,0,0,0,25000,600,1,9050,9050
-7,11,1.6000000000000001,0,113300,7,9,11,13,15,160,46,1,0,17,19,21,23,2,12,-9,960,2240,671,671,2006,0,2006,1,711,112000,1300,0,0,26000,620,2,9060,9060
+7,11,1.6000000000000001,0,113300,7,9,11,13,15,160,46,1,0,17,19,21,23,2,12,-9,960,0,671,671,2006,0,2006,1,711,112000,1300,0,0,26000,620,2,9060,9060
8,0,1,0,158035,8,10,12,14,16,170,47,2,1,18,20,22,24,3,1,-9,970,2280,-4378,657,10700,10700,0,2,737,114000,0,43500,0,27000,640,3,14105,9070
9,0,1.1000000000000001,0,119480,9,11,13,15,17,180,48,3,2,19,21,23,25,4,8,-9,980,0,643,643,10800,10800,0,3,763,116000,0,0,3480,28000,660,0,9080,9080
-10,0,1.2,0,1450,10,12,14,16,18,190,49,1,0,20,22,24,26,5,11,1,990,2360,629,629,0,0,0,4,789,0,1450,0,0,29000,680,1,9090,9090
+10,0,1.2,0,1450,10,12,14,16,18,190,49,1,0,20,22,24,26,5,11,1,990,0,629,629,0,0,0,4,789,0,1450,0,0,29000,680,1,9090,9090
11,15,1.3,20,20,11,13,15,17,19,200,50,2,1,21,23,25,27,1,12,2,1000,0,-4235,815,0,0,0,4,815,0,0,0,0,30000,700,2,14150,9100
12,0,1.3999999999999999,0,0,12,14,16,18,20,210,51,3,2,22,24,26,28,2,1,1,1010,0,801,801,0,0,0,5,841,0,0,0,0,31000,720,3,9110,9110
-13,0,1.5,0,129320,13,15,17,19,21,220,52,1,0,23,25,27,29,3,8,-9,1020,2480,787,787,2012,0,2012,1,867,124000,1600,0,3720,32000,740,0,9120,9120
+13,0,1.5,0,129320,13,15,17,19,21,220,52,1,0,23,25,27,29,3,8,-9,1020,0,787,787,2012,0,2012,1,867,124000,1600,0,3720,32000,740,0,9120,9120
14,0,1.6000000000000001,0,172500,14,16,18,20,22,230,53,2,1,24,26,28,30,4,11,-9,1030,2520,-4292,773,11300,11300,0,2,893,126000,0,46500,0,33000,760,1,14195,9130
15,19,1,0,128570,15,17,19,21,23,240,54,3,2,25,27,29,31,5,12,-9,1040,0,759,759,11400,11400,0,3,919,128000,0,0,0,34000,780,2,9140,9140
-16,0,1.1000000000000001,25,1775,16,18,20,22,24,250,55,1,0,26,28,30,32,1,1,1,1050,2600,945,945,0,0,0,4,945,0,1750,0,0,35000,800,3,9150,9150
+16,0,1.1000000000000001,25,1775,16,18,20,22,24,250,55,1,0,26,28,30,32,1,1,1,1050,0,945,945,0,0,0,4,945,0,1750,0,0,35000,800,3,9150,9150
17,0,1.2,0,3960,17,19,21,23,25,260,56,2,1,27,29,31,33,2,8,2,1060,0,-4149,931,0,0,0,4,971,0,0,0,3960,36000,820,0,14240,9160
18,0,1.3,0,0,18,20,22,24,26,270,57,3,2,28,30,32,34,3,11,1,1070,0,917,917,0,0,0,5,997,0,0,0,0,37000,840,1,9170,9170
-19,0,1.3999999999999999,0,137900,19,21,23,25,27,280,58,1,0,29,31,33,35,4,12,-9,1080,2720,903,903,2018,0,2018,1,1023,136000,1900,0,0,38000,860,2,9180,9180
+19,0,1.3999999999999999,0,137900,19,21,23,25,27,280,58,1,0,29,31,33,35,4,12,-9,1080,0,903,903,2018,0,2018,1,1023,136000,1900,0,0,38000,860,2,9180,9180
20,0,1.5,0,187500,20,22,24,26,28,290,59,2,1,30,32,34,36,5,1,-9,1090,2760,-4206,889,11900,11900,0,2,1049,138000,0,49500,0,39000,880,3,14285,9190
21,5,1.6000000000000001,30,144230,21,23,25,27,29,300,60,3,2,31,33,35,37,1,8,-9,1100,0,1075,1075,12000,12000,0,3,1075,140000,0,0,4200,40000,900,0,9200,9200
-22,0,1,0,2655,22,24,26,28,30,310,61,1,0,32,34,36,38,2,11,1,1110,2840,1061,1061,0,0,0,4,1101,0,2050,0,0,41000,920,1,9210,9210
+22,0,1,0,2655,22,24,26,28,30,310,61,1,0,32,34,36,38,2,11,1,1110,0,1061,1061,0,0,0,4,1101,0,2050,0,0,41000,920,1,9210,9210
23,0,1.1000000000000001,0,0,23,25,27,29,31,320,62,2,1,33,35,37,39,3,12,2,1120,0,-4063,1047,0,0,0,4,1127,0,0,0,0,42000,940,2,14330,9220
24,0,1.2,0,0,24,26,28,30,32,330,63,3,2,34,36,38,40,4,1,1,1130,0,1033,1033,0,0,0,5,1153,0,0,0,0,43000,960,3,9230,9230
-25,9,1.3,0,154640,25,27,29,31,33,340,64,1,0,35,37,39,41,5,8,-9,1140,2960,1019,1019,2024,0,2024,1,1179,148000,2200,0,4440,44000,980,0,9240,9240
+25,9,1.3,0,154640,25,27,29,31,33,340,64,1,0,35,37,39,41,5,8,-9,1140,0,1019,1019,2024,0,2024,1,1179,148000,2200,0,4440,44000,980,0,9240,9240
26,0,1.3999999999999999,35,202535,26,28,30,32,34,350,65,2,1,36,38,40,42,1,11,-9,1150,3000,-3920,1205,12500,12500,0,2,1205,150000,0,52500,0,45000,1000,1,14375,9250
27,0,1.5,0,152000,27,29,31,33,35,360,66,3,2,37,39,41,43,2,12,-9,1160,0,1191,1191,12600,12600,0,3,1231,152000,0,0,0,46000,1020,2,9260,9260
-28,0,1.6000000000000001,0,2350,28,30,32,34,36,370,67,1,0,38,40,42,44,3,1,1,1170,3080,1177,1177,0,0,0,4,1257,0,2350,0,0,47000,1040,3,9270,9270
+28,0,1.6000000000000001,0,2350,28,30,32,34,36,370,67,1,0,38,40,42,44,3,1,1,1170,0,1177,1177,0,0,0,4,1257,0,2350,0,0,47000,1040,3,9270,9270
29,13,1,0,5320,29,31,33,35,37,380,68,2,1,39,41,43,45,4,8,2,1180,0,-3977,1163,0,0,0,4,1283,0,0,0,4680,48000,1060,0,14420,9280
30,0,1.1000000000000001,0,0,30,32,34,36,38,390,69,3,2,40,42,44,46,5,11,1,1190,0,1149,1149,0,0,0,5,1309,0,0,0,0,49000,1080,1,9290,9290
-31,0,1.2,40,162540,31,33,35,37,39,400,70,1,0,41,43,45,47,1,12,-9,1200,3200,1335,1335,2030,0,2030,1,1335,160000,2500,0,0,50000,1100,2,9300,9300
+31,0,1.2,40,162540,31,33,35,37,39,400,70,1,0,41,43,45,47,1,12,-9,1200,0,1335,1335,2030,0,2030,1,1335,160000,2500,0,0,50000,1100,2,9300,9300
32,0,1.3,0,217500,32,34,36,38,40,410,71,2,1,42,44,46,48,2,1,-9,1210,3240,-3834,1321,13100,13100,0,2,1361,162000,0,55500,0,51000,1120,3,14465,9310
33,0,1.3999999999999999,0,168920,33,35,37,39,41,420,72,3,2,43,45,47,49,3,8,-9,1220,0,1307,1307,13200,13200,0,3,1387,164000,0,0,4920,52000,1140,0,9320,9320
-34,0,1.5,0,2650,34,36,38,40,42,430,73,1,0,44,46,48,50,4,11,1,1230,3320,1293,1293,0,0,0,4,1413,0,2650,0,0,53000,1160,1,9330,9330
+34,0,1.5,0,2650,34,36,38,40,42,430,73,1,0,44,46,48,50,4,11,1,1230,0,1293,1293,0,0,0,4,1413,0,2650,0,0,53000,1160,1,9330,9330
35,19,1.6000000000000001,0,0,35,37,39,41,43,440,74,2,1,45,47,49,51,5,12,2,1240,0,-3891,1279,0,0,0,4,1439,0,0,0,0,54000,1180,2,14510,9340
36,0,1,45,720,36,38,40,42,44,450,75,3,2,46,48,50,52,1,1,1,1250,0,1465,1465,0,0,0,5,1465,0,0,0,0,55000,1200,3,9350,9350
-37,0,1.1000000000000001,0,179960,37,39,41,43,45,460,76,1,0,47,49,51,53,2,8,-9,1260,3440,1451,1451,2036,0,2036,1,1491,172000,2800,0,5160,56000,1220,0,9360,9360
+37,0,1.1000000000000001,0,179960,37,39,41,43,45,460,76,1,0,47,49,51,53,2,8,-9,1260,0,1451,1451,2036,0,2036,1,1491,172000,2800,0,5160,56000,1220,0,9360,9360
38,0,1.2,0,232500,38,40,42,44,46,470,77,2,1,48,50,52,54,3,11,-9,1270,3480,-3748,1437,13700,13700,0,2,1517,174000,0,58500,0,57000,1240,1,14555,9370
39,23,1.3,0,176000,39,41,43,45,47,480,78,3,2,49,51,53,55,4,12,-9,1280,0,1423,1423,13800,13800,0,3,1543,176000,0,0,0,58000,1260,2,9380,9380
-40,0,1.3999999999999999,0,2950,40,42,44,46,48,490,79,1,0,50,52,54,56,5,1,1,1290,3560,1409,1409,0,0,0,4,1569,0,2950,0,0,59000,1280,3,9390,9390
+40,0,1.3999999999999999,0,2950,40,42,44,46,48,490,79,1,0,50,52,54,56,5,1,1,1290,0,1409,1409,0,0,0,4,1569,0,2950,0,0,59000,1280,3,9390,9390
41,0,1.5,50,5450,41,43,45,47,49,500,80,2,1,51,53,55,57,1,8,2,1300,0,-3605,1595,0,0,0,4,1595,0,0,0,5400,60000,1300,0,14600,9400
42,0,1.6000000000000001,0,0,42,44,46,48,50,510,81,3,2,52,54,56,58,2,11,1,1310,0,1581,1581,0,0,0,5,1621,0,0,0,0,61000,1320,1,9410,9410
-43,7,1,0,187810,43,45,47,49,51,520,82,1,0,53,55,57,59,3,12,-9,1320,3680,1567,1567,2042,0,2042,1,1647,184000,3100,0,0,62000,1340,2,9420,9420
+43,7,1,0,187810,43,45,47,49,51,520,82,1,0,53,55,57,59,3,12,-9,1320,0,1567,1567,2042,0,2042,1,1647,184000,3100,0,0,62000,1340,2,9420,9420
44,0,1.1000000000000001,0,247500,44,46,48,50,52,530,83,2,1,54,56,58,60,4,1,-9,1330,3720,-3662,1553,14300,14300,0,2,1673,186000,0,61500,0,63000,1360,3,14645,9430
45,0,1.2,0,193640,45,47,49,51,53,540,84,3,2,55,57,59,61,5,8,-9,1340,0,1539,1539,14400,14400,0,3,1699,188000,0,0,5640,64000,1380,0,9440,9440
-46,0,1.3,55,3305,46,48,50,52,54,550,85,1,0,56,58,60,62,1,11,1,1350,3800,1725,1725,0,0,0,4,1725,0,3250,0,0,65000,1400,1,9450,9450
+46,0,1.3,55,3305,46,48,50,52,54,550,85,1,0,56,58,60,62,1,11,1,1350,0,1725,1725,0,0,0,4,1725,0,3250,0,0,65000,1400,1,9450,9450
47,0,1.3999999999999999,0,0,47,49,51,53,55,560,86,2,1,57,59,61,63,2,12,2,1360,0,-3519,1711,0,0,0,4,1751,0,0,0,0,66000,1420,2,14690,9460
48,0,1.5,0,0,48,50,52,54,56,570,87,3,2,58,60,62,64,3,1,1,1370,0,1697,1697,0,0,0,5,1777,0,0,0,0,67000,1440,3,9470,9470
-49,13,1.6000000000000001,0,205280,49,51,53,55,57,580,88,1,0,59,61,63,65,4,8,-9,1380,3920,1683,1683,2048,0,2048,1,1803,196000,3400,0,5880,68000,1460,0,9480,9480
+49,13,1.6000000000000001,0,205280,49,51,53,55,57,580,88,1,0,59,61,63,65,4,8,-9,1380,0,1683,1683,2048,0,2048,1,1803,196000,3400,0,5880,68000,1460,0,9480,9480
50,0,1,0,263245,50,52,54,56,58,590,89,2,1,60,62,64,66,5,11,-9,1390,3960,-3576,1669,14900,14900,0,2,1829,198000,0,64500,0,69000,1480,1,14735,9490
51,0,1.1000000000000001,60,200060,51,53,55,57,59,600,90,3,2,61,63,65,67,1,12,-9,1400,0,1855,1855,15000,15000,0,3,1855,200000,0,0,0,70000,1500,2,9500,9500
-52,0,1.2,0,3550,52,54,56,58,60,610,91,1,0,62,64,66,68,2,1,1,1410,4040,1841,1841,0,0,0,4,1881,0,3550,0,0,71000,1520,3,9510,9510
+52,0,1.2,0,3550,52,54,56,58,60,610,91,1,0,62,64,66,68,2,1,1,1410,0,1841,1841,0,0,0,4,1881,0,3550,0,0,71000,1520,3,9510,9510
53,17,1.3,0,6120,53,55,57,59,61,620,92,2,1,63,65,67,69,3,8,2,1420,0,-3433,1827,0,0,0,4,1907,0,0,0,6120,72000,1540,0,14780,9520
54,0,1.3999999999999999,0,0,54,56,58,60,62,630,93,3,2,64,66,68,70,4,11,1,1430,0,1813,1813,0,0,0,5,1933,0,0,0,0,73000,1560,1,9530,9530
-55,0,1.5,0,211700,55,57,59,61,63,640,94,1,0,65,67,69,71,5,12,-9,1440,4160,1799,1799,2054,0,2054,1,1959,208000,3700,0,0,74000,1580,2,9540,9540
+55,0,1.5,0,211700,55,57,59,61,63,640,94,1,0,65,67,69,71,5,12,-9,1440,0,1799,1799,2054,0,2054,1,1959,208000,3700,0,0,74000,1580,2,9540,9540
56,0,1.6000000000000001,65,277565,56,58,60,62,64,650,95,2,1,66,68,70,72,1,1,-9,1450,4200,-3290,1985,15500,15500,0,2,1985,210000,0,67500,0,75000,1600,3,14825,9550
57,21,1,0,219140,57,59,61,63,65,660,96,3,2,67,69,71,73,2,8,-9,1460,0,1971,1971,15600,15600,0,3,2011,212000,0,0,6360,76000,1620,0,9560,9560
-58,0,1.1000000000000001,0,3850,58,60,62,64,66,670,97,1,0,68,70,72,74,3,11,1,1470,4280,1957,1957,0,0,0,4,2037,0,3850,0,0,77000,1640,1,9570,9570
+58,0,1.1000000000000001,0,3850,58,60,62,64,66,670,97,1,0,68,70,72,74,3,11,1,1470,0,1957,1957,0,0,0,4,2037,0,3850,0,0,77000,1640,1,9570,9570
59,0,1.2,0,0,59,61,63,65,67,680,98,2,1,69,71,73,75,4,12,2,1480,0,-3347,1943,0,0,0,4,2063,0,0,0,0,78000,1660,2,14870,9580
60,0,1.3,0,0,60,62,64,66,68,690,99,3,2,70,72,74,76,5,1,1,1490,0,1929,1929,0,0,0,5,2089,0,0,0,0,79000,1680,3,9590,9590
-61,0,1.3999999999999999,70,230670,61,63,65,67,69,700,100,1,0,71,73,75,77,1,8,-9,1500,4400,2115,2115,2060,0,2060,1,2115,220000,4000,0,6600,80000,1700,0,9600,9600
+61,0,1.3999999999999999,70,230670,61,63,65,67,69,700,100,1,0,71,73,75,77,1,8,-9,1500,0,2115,2115,2060,0,2060,1,2115,220000,4000,0,6600,80000,1700,0,9600,9600
62,0,1.5,0,292500,62,64,66,68,70,710,101,2,1,72,74,76,78,2,11,-9,1510,4440,-3204,2101,16100,16100,0,2,2141,222000,0,70500,0,81000,1720,1,14915,9610
63,7,1.6000000000000001,0,224000,63,65,67,69,71,720,102,3,2,73,75,77,79,3,12,-9,1520,0,2087,2087,16200,16200,0,3,2167,224000,0,0,0,82000,1740,2,9620,9620
-64,0,1,0,4965,64,66,68,70,72,730,103,1,0,74,76,78,80,4,1,1,1530,4520,2073,2073,0,0,0,4,2193,0,4150,0,0,83000,1760,3,9630,9630
+64,0,1,0,4965,64,66,68,70,72,730,103,1,0,74,76,78,80,4,1,1,1530,0,2073,2073,0,0,0,4,2193,0,4150,0,0,83000,1760,3,9630,9630
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 44fc084f8..54ee93d7d 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":"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":"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":"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":"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":"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.132.6"],["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":"13e517b9b92cd8b4049d7fd239eb5f900f8956bd4f289e8f8002354b4ebd6b82","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","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","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","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","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"],"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":"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":"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":"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":"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":"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","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","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","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","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"],"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.132.6"],["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.132.6"],["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.132.6"],["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.132.6"],["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":"425beb2093c2f603e6b7394b98dcb129b2162b73447b6e6a7be33b537ff2ffe1","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.132.6"],["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.132.6"],["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":"7ec718c35f8ab04c7dba62f5b5090161e1abace5d1c3bd313f05b0e584b7dcde","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","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","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","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","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","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.132.6"],["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","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","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","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","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","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","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","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","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","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","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.132.6"],["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","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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.132.6"],["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":"78b4ba120f353c529052389942945c6a3bd6a67e0e43085a3da81dce6101cb8c","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","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age"],"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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.132.6"],["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":"ccffd3ad9613088d6be8ad02a00de7ce9ae83f653cb68311c0862a6e25c62698","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","tax_free_childcare_spend_routed_share"],"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.132.6"],["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","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","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","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","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","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"],"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.132.6"],["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","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","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","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","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","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"],"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.132.6"],["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":"b7eb5ecf39ae82822a02d49cdc8edc00bedd77e091de1d98d38a8c180146b2c0","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions"],"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.132.6"],["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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","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.132.6"],["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":"d86ab4a1f53cf097f42c9c047e7a3fbb5144dc88496b49cb846b3f8be0bbe0a1","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","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","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","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","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","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","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":"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":"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.132.6"],["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":"fd9e9103e4f12e022ed0dc7991d1169fd8e8ccd5c606a189830ce87f1c590338","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.132.6"],["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":"9941b70870b0ced1ea1f51e9c9f12768005ea6c53ffdba1db3cb4e2ee030af87","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"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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 property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","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.132.6"],["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":"8c45b96e6c1cd6a3ec8080b674f06666b1bd1e86ecef4a654c18f9825977eb1b","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"07ee2b923275266dc6c9a94ad5a8f3c47c5edaa7b61f5db4cd5335537ef9b8c0","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.132.6"],["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":"a10aeec0491876f0906782a34e197bb52162f045678ca3c19769feabe14b09c6","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"01adfcc85d77f38fb9cc896e2e4b4c4752518d9e2aa69e6947832678c25ecf19","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"85c52b57b06db2075b6422e8202b90eb70ebe60a3345e59cf48a4a0460f583e4","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"93b86a8b8bbb49caebab64381c716da2d78eb7cd43d0bf1ee9edbf3a07b64539","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"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.132.6"],["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":"ecdb9e361778e22b5563a29b277854e8deb4ae3bb1760a5a17dadd4b7490e491","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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_value","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.132.6"],["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":"40440a087f84967c734a1204f1dedcc2432556c7ce2a41f3c38bc9055f324bfa","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.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"],"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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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"],"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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"6f1eac2609e868894a287254aac75ec57c0199783c6ae6cf4782f3fbb99f6e92","time_period":"2024"},"population":"child_benefit_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":["child_benefit_opts_out","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age"],"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.132.6"],["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":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"child_benefit_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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"f7ef8492bacde1607f24693d7362110ba55ad3d083688f3df61de40dbe65bdc0","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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"39011749dc0e95362e4ab606f09e95d457fdf3b40c66df9511d93dbb8208805d","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.132.6"],["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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.132.6"],["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":"7f0d337931147778916aecbfbae24c215c6a291850bb10496fa3843f0c66a88e","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.132.6"],["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":"e72182038e4138424e05715bce590d26ce42c477451954088ddfd2fac05060e8","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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"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.132.6"],["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":"a64ac17ecb296b12171a1c5f3eb0b4dcaac9f32d08cffb95d7b87d094aeec693","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.132.6"],["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},{"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","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","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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.132.6"],["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":"cgt_residential_split","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":"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":"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":"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":"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":"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.134.4"],["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":"13e517b9b92cd8b4049d7fd239eb5f900f8956bd4f289e8f8002354b4ebd6b82","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","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","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","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","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"],"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":"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":"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":"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":"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":"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","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","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","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","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"],"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.134.4"],["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.134.4"],["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.134.4"],["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.134.4"],["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":"425beb2093c2f603e6b7394b98dcb129b2162b73447b6e6a7be33b537ff2ffe1","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.134.4"],["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.134.4"],["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":"7ec718c35f8ab04c7dba62f5b5090161e1abace5d1c3bd313f05b0e584b7dcde","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","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","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","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","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","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.134.4"],["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","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","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","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","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","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","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","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","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","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","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.134.4"],["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","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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.134.4"],["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":"78b4ba120f353c529052389942945c6a3bd6a67e0e43085a3da81dce6101cb8c","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","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age"],"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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.134.4"],["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":"ccffd3ad9613088d6be8ad02a00de7ce9ae83f653cb68311c0862a6e25c62698","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","tax_free_childcare_spend_routed_share"],"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.134.4"],["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","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","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","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","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","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"],"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.134.4"],["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","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","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","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","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","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"],"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.134.4"],["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":"b7eb5ecf39ae82822a02d49cdc8edc00bedd77e091de1d98d38a8c180146b2c0","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions"],"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.134.4"],["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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","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.134.4"],["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":"d86ab4a1f53cf097f42c9c047e7a3fbb5144dc88496b49cb846b3f8be0bbe0a1","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","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","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","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","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","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","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":"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":"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.134.4"],["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":"fd9e9103e4f12e022ed0dc7991d1169fd8e8ccd5c606a189830ce87f1c590338","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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"}],"params":{"numerical_dependencies":[["policyengine-uk","2.134.4"],["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":"9941b70870b0ced1ea1f51e9c9f12768005ea6c53ffdba1db3cb4e2ee030af87","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"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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.134.4"],["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.134.4"],["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":"8c45b96e6c1cd6a3ec8080b674f06666b1bd1e86ecef4a654c18f9825977eb1b","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.134.4"],["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":"281fe34ea94f71ac1a0652bf3ec17922f0d46919bfb74ab7b367ba6e9d680826","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","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"07ee2b923275266dc6c9a94ad5a8f3c47c5edaa7b61f5db4cd5335537ef9b8c0","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","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.134.4"],["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":"a10aeec0491876f0906782a34e197bb52162f045678ca3c19769feabe14b09c6","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","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","has_fuel_consumption","uses_energy_prepayment_meter"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"01adfcc85d77f38fb9cc896e2e4b4c4752518d9e2aa69e6947832678c25ecf19","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","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","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"85c52b57b06db2075b6422e8202b90eb70ebe60a3345e59cf48a4a0460f583e4","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"93b86a8b8bbb49caebab64381c716da2d78eb7cd43d0bf1ee9edbf3a07b64539","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"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.134.4"],["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":"ecdb9e361778e22b5563a29b277854e8deb4ae3bb1760a5a17dadd4b7490e491","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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_value","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.134.4"],["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":"40440a087f84967c734a1204f1dedcc2432556c7ce2a41f3c38bc9055f324bfa","time_period":"2024"},"population":"uc_capital_coherence.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","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.134.4"],["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":"759eba9869bb39f43d0a881de8630c132751ecb9467d97e6558899cb390f38b2","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"6f1eac2609e868894a287254aac75ec57c0199783c6ae6cf4782f3fbb99f6e92","time_period":"2024"},"population":"child_benefit_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":["child_benefit_opts_out","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age"],"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.134.4"],["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":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"child_benefit_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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"f7ef8492bacde1607f24693d7362110ba55ad3d083688f3df61de40dbe65bdc0","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"39011749dc0e95362e4ab606f09e95d457fdf3b40c66df9511d93dbb8208805d","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.134.4"],["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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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.134.4"],["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":"8dabf9d95020e7a22bbd0d319ffb607e1346d1972c1e1b40999bc9de4ed18e65","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.134.4"],["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":"1a283ff078c784b79a6063120113d237d766c2c54cb4307dbdcc1b2a75930a9c","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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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":"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.134.4"],["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":"a64ac17ecb296b12171a1c5f3eb0b4dcaac9f32d08cffb95d7b87d094aeec693","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.134.4"],["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},{"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","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","has_fuel_consumption","uses_energy_prepayment_meter","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","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","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","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","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","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","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","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","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.134.4"],["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":"cgt_residential_split","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/tools/build_uk_ledger_compile_parity_signed_differences.py b/tools/build_uk_ledger_compile_parity_signed_differences.py
index 713c4003e..615541d0c 100644
--- a/tools/build_uk_ledger_compile_parity_signed_differences.py
+++ b/tools/build_uk_ledger_compile_parity_signed_differences.py
@@ -123,6 +123,17 @@ class ParityReceiptSpec:
"high-value council tax surcharge."
)
+_OBR_SDLT_HOUSEHOLDS_RATIONALE = (
+ "Payer and period basis (uk-data#564, microcosm#1095): ours binds households' "
+ "SDLT, the OBR March 2026 line 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) times individuals' share of HMRC's 2024-25 "
+ "SDLT receipts, residential (Table 8a) and non-residential (Table 8b) "
+ "together; the frozen incumbent fixture holds the FY2025-26 value of the "
+ "whole line alone, which companies, partnerships and collective investment "
+ "schemes pay about a third of."
+)
+
_ESA_CUBE_DRIFT_RATIONALE = (
"Source class (PolicyEngine/chronicle#280 lane): ours binds DWP's Stat-Xplore ESA "
"caseload by payment type as the mean of the four quarterly points inside "
@@ -760,6 +771,8 @@ def _add_signed_rationale_notes(
row["reason"] = _SPI_REGION_LEDGER_ONLY_RATIONALE
elif name == "obr.council_tax" and row.get("kind") == "calibration_drift":
row["reason"] = _OBR_COUNCIL_TAX_GB_RECEIPTS_RATIONALE
+ elif name == "obr.sdlt" and row.get("kind") == "calibration_drift":
+ row["reason"] = _OBR_SDLT_HOUSEHOLDS_RATIONALE
elif (
name.startswith("obr.")
and row.get("kind") == "calibration_drift"
diff --git a/tools/build_uk_release_input_coverage_manifest.py b/tools/build_uk_release_input_coverage_manifest.py
index 19ecef584..b220dd023 100644
--- a/tools/build_uk_release_input_coverage_manifest.py
+++ b/tools/build_uk_release_input_coverage_manifest.py
@@ -928,6 +928,14 @@ def build_manifest(
stage_name="property_components",
candidate_source=candidate_source,
),
+ "regional_home_values": _source_stage_family_coverage_contract(
+ stage_name="regional_home_values",
+ candidate_source=candidate_source,
+ ),
+ "property_purchases": _source_stage_family_coverage_contract(
+ stage_name="property_purchases",
+ candidate_source=candidate_source,
+ ),
"lcfs_consumption": _source_stage_family_coverage_contract(
stage_name="lcfs_consumption",
candidate_source=candidate_source,
diff --git a/tools/certify_uk_release_cut.py b/tools/certify_uk_release_cut.py
index d36cca402..190f99ebe 100644
--- a/tools/certify_uk_release_cut.py
+++ b/tools/certify_uk_release_cut.py
@@ -44,6 +44,7 @@
from microcosm.build.uk_runtime.high_value_homes import (
load_uk_high_value_home_stock_facts,
)
+from microcosm.build.uk_runtime.hmrc_uprating import assert_installed_engine_is_pinned
from microcosm.build.uk_runtime.ledger_targets import (
compile_uk_local_target_registry,
compile_uk_target_registry,
@@ -92,6 +93,8 @@ def _ledger_facts_size(path: Path) -> int:
def main(argv: list[str] | None = None) -> int:
args = _parse_args(argv)
+ # The engine freeze, before either H5 is hashed (microcosm#1095).
+ assert_installed_engine_is_pinned()
started_at = time.perf_counter()
started_ts = datetime.now(UTC)
code_pin = git_code_pin(_REPOSITORY)
diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py
index c76dcb538..64b1ed220 100644
--- a/tools/generate_uk_target_references.py
+++ b/tools/generate_uk_target_references.py
@@ -1119,9 +1119,13 @@ def _add_uk_membership_accounting(
"uk/high_value_home_stock_facts.json (microcosm#1240). Each row "
"is the cross-grain control for its area cells. They bind on "
"the local line only (calibration_lines): the national line "
- "and the release-cut certifier drop them after the compile, "
- "since the national spine's main_residence_value is the WAS "
- "donor's, not a Land Registry placement (microcosm#1301)."
+ "and the release-cut certifier drop them after the compile "
+ "(microcosm#1301). Since microcosm#1095 the national spine "
+ "reads main_residence_value off the regions' Land Registry "
+ "knots too, but binding the rows there would move the "
+ "national registry and solve while the knots' tails still "
+ "place more homes in the top bands than the derived stock "
+ "(microcosm#1112)."
),
},
{
diff --git a/tools/graph_uk_spine_fixture.py b/tools/graph_uk_spine_fixture.py
index af154a981..ebf3cf29b 100644
--- a/tools/graph_uk_spine_fixture.py
+++ b/tools/graph_uk_spine_fixture.py
@@ -17,6 +17,7 @@
import argparse
import hashlib
import json
+import tempfile
from collections.abc import Iterable, Mapping
from dataclasses import replace
from pathlib import Path
@@ -114,6 +115,9 @@
BUS_FARE_LCFS_CODES,
UKLCFSConsumptionStageTransform,
)
+from microcosm.build.uk_runtime.legacy_closure_take_up import (
+ UKLegacyClosureTakeUpStageTransform,
+)
from microcosm.build.uk_runtime.nts_bus_travel import UKNTSBusTravelStageTransform
from microcosm.build.uk_runtime.pension_credit_take_up import (
UKPensionCreditTakeUpStageTransform,
@@ -124,6 +128,19 @@
from microcosm.build.uk_runtime.property_components import (
UKPropertyComponentsStageTransform,
)
+from microcosm.build.uk_runtime.property_purchases import (
+ PROPERTY_PURCHASE_BAND_IDS,
+ PROPERTY_PURCHASE_KINDS,
+ UKPropertyPurchasesStageTransform,
+ UKPropertyPurchaseTarget,
+ UKPropertyPurchaseTargets,
+ property_purchase_uniforms,
+ sdlt_region_mask,
+ select_property_purchasers,
+)
+from microcosm.build.uk_runtime.regional_home_values import (
+ UKRegionalHomeValuesStageTransform,
+)
from microcosm.build.uk_runtime.regional_uprating import (
UKRegionalPropertyUpratingStageTransform,
)
@@ -178,7 +195,7 @@
_SPI_DONOR_SAMPLE_SIZE = 64
#: The packaged FRS spine roster the fixture exercises (manifest minus the
#: certified-pair exclusions); moves whenever a spine stage is added.
-UK_FIXTURE_STAGE_COUNT = 42
+UK_FIXTURE_STAGE_COUNT = 45
_QRF_ESTIMATORS = 4
# These are the complete object-string surface observed in the unchanged
@@ -831,9 +848,13 @@ def _was_donor() -> pd.DataFrame:
"GORR8": np.take([8, 11, 12, 1], position % 4),
"DVPriRntR8": private_rent,
"DVCTaxAmtAnnualR8": 900.0 + rows * 10.0,
- # Net rent where the household holds property beyond its home.
+ # Net rent where the household lets property: buy-to-let, not every
+ # other house. With rent on every other house too, no recipient
+ # drew any other house, so the frame held no other residential
+ # stock and the purchases stage could not run its scaled fit
+ # (microcosm#1095).
"DVNetRentAmtAnnualR8_aggr": np.where(
- (other_houses > 0.0) | (buy_to_let > 0.0), 2_000.0 + rows * 40.0, 0.0
+ buy_to_let > 0.0, 2_000.0 + rows * 40.0, 0.0
),
"HFINWNTR8_Sum": gross_financial - consumer_debt - student_loans,
"HFINWNTR8_exSLC_Sum": gross_financial - consumer_debt,
@@ -1461,6 +1482,92 @@ def facts_with(bands: tuple[HMRCCGTBADRBand, ...]) -> HMRCCGTAssetTypeFacts:
_FIXTURE_PRIS_INDIVIDUALS_SHARE = 0.99
+#: The fixture's purchase targets: a share of each kind's eligible
+#: England-and-Northern-Ireland owner weight, priced from bands in multiples of
+#: a floor scaled to the synthetic donor's small stocks (count, mean), so the
+#: stage fits a real threshold and scale on the small frame. Production
+#: targets carry HMRC's GBP 40,000 floor.
+_FIXTURE_PURCHASE_RATE = 0.25
+_FIXTURE_PURCHASE_MINIMUM = 1_000.0
+_FIXTURE_PURCHASE_BANDS = (
+ (60.0, 1.5),
+ (30.0, 3.0),
+ (14.0, 6.0),
+ (3.0, 11.0),
+ (2.0, 15.0),
+ (1.0, 40.0),
+)
+#: The share of its non-residential value target the fixture's purchasers'
+#: stock carries: above the stage's 80% floor, so the stage runs the stock-cap
+#: fit, as the national spine's non-residential purchases do.
+_FIXTURE_STOCK_CAP_FIT = 0.9
+
+
+def _property_purchase_targets(frame: Frame) -> UKPropertyPurchaseTargets:
+ """Synthetic purchase targets sized to the frame ``property_purchases`` reads.
+
+ The count is a fixed share of each kind's eligible owner weight, found with
+ the stage's own selection and streams. The non-residential value asks a
+ ninth more than the purchasers' stock, so the stage buys at the stock; the
+ additional-dwelling value lies midway between the price floor and the
+ stock, so the stage scales its band draws. One kind runs each fit, as on
+ the national spine.
+ """
+
+ household = frame.table("household")
+ weights = np.asarray(frame.weights_for("household").values, dtype=float)
+ sdlt = sdlt_region_mask(household["region"])
+ ids = household["household_id"].to_numpy()
+ targets = {}
+ for kind in PROPERTY_PURCHASE_KINDS:
+ stock = pd.to_numeric(household[kind.stock], errors="raise").to_numpy(
+ dtype=float
+ )
+ eligible = (stock >= _FIXTURE_PURCHASE_MINIMUM) & (weights > 0) & sdlt
+ if not eligible.any():
+ # The synthetic frame holds no stock of this kind: not imputed.
+ targets[kind.name] = None
+ continue
+ transactions = _FIXTURE_PURCHASE_RATE * float(weights[eligible].sum())
+ event_uniforms, _ = property_purchase_uniforms(ids, kind)
+ purchased, _ = select_property_purchasers(
+ stock=stock,
+ weights=weights,
+ sdlt_mask=sdlt,
+ event_uniforms=event_uniforms,
+ transactions=transactions,
+ minimum_price=_FIXTURE_PURCHASE_MINIMUM,
+ property_type=kind.name,
+ )
+ fitted = weights * (purchased & sdlt)
+ floor = _FIXTURE_PURCHASE_MINIMUM * float(fitted.sum())
+ capacity = float(np.dot(stock, fitted))
+ if not capacity > floor:
+ raise RuntimeError(
+ f"The fixture's {kind.name} purchasers hold no stock above the floor."
+ )
+ targets[kind.name] = UKPropertyPurchaseTarget(
+ property_type=kind.name,
+ transactions=transactions,
+ value=(
+ capacity / _FIXTURE_STOCK_CAP_FIT
+ if kind.name == "non_residential"
+ else (floor + capacity) / 2.0
+ ),
+ band_ids=PROPERTY_PURCHASE_BAND_IDS,
+ band_transactions=tuple(count for count, _ in _FIXTURE_PURCHASE_BANDS),
+ band_values=tuple(
+ count * mean * _FIXTURE_PURCHASE_MINIMUM
+ for count, mean in _FIXTURE_PURCHASE_BANDS
+ ),
+ minimum_price=_FIXTURE_PURCHASE_MINIMUM,
+ )
+ return UKPropertyPurchaseTargets(
+ additional_residential=targets["additional_residential"],
+ non_residential=targets["non_residential"],
+ )
+
+
def _property_rental_facts(frame: Frame) -> HMRCPropertyRentalFacts:
"""Synthetic PRIS facts sized to the frame ``property_components`` reads.
@@ -1783,6 +1890,7 @@ def _build_implementations(
cgt_badr_parameters: UKCGTBADRParameters,
cgt_asset_type_facts: HMRCCGTAssetTypeFacts | None = None,
property_rental_facts: HMRCPropertyRentalFacts | None = None,
+ property_purchase_targets: UKPropertyPurchaseTargets | None = None,
) -> tuple[dict[str, object], dict[str, Frame]]:
engine = PolicyEngineUKEngine()
contract = load_uk_take_up_contract()
@@ -1866,6 +1974,13 @@ def capture_root(frame: Frame) -> Frame:
donor_table=spi_donor,
facts=property_rental_facts,
),
+ "regional_home_values": UKRegionalHomeValuesStageTransform(
+ stage=stages["regional_home_values"]
+ ),
+ "property_purchases": UKPropertyPurchasesStageTransform(
+ stage=stages["property_purchases"],
+ targets=property_purchase_targets,
+ ),
"lcfs_consumption": UKLCFSConsumptionStageTransform(
stage=stages["lcfs_consumption"],
engine=engine,
@@ -1913,6 +2028,9 @@ def capture_root(frame: Frame) -> Frame:
"uc_capital_coherence": UKUCCapitalCoherenceStageTransform(
stage=stages["uc_capital_coherence"]
),
+ "uc_legacy_closure_take_up": UKLegacyClosureTakeUpStageTransform(
+ stage=stages["uc_legacy_closure_take_up"]
+ ),
"pension_credit_take_up": UKPensionCreditTakeUpStageTransform(
stage=stages["pension_credit_take_up"], engine=engine
),
@@ -2109,6 +2227,20 @@ def generate(output: Path) -> None:
)
build_kwargs["property_rental_facts"] = property_rental_facts
implementations, _ = _build_implementations(**build_kwargs)
+ # The purchase targets are sized to the frame property_purchases reads.
+ prefix = stages[: stage_names.index("property_purchases")]
+ prefix_names = {stage.stage for stage in prefix}
+ before_purchases = _run_legacy_plan(
+ prefix,
+ {name: impl for name, impl in implementations.items() if name in prefix_names},
+ )
+ property_purchase_targets = _property_purchase_targets(before_purchases)
+ _write_json(
+ sources / "property_purchase_targets.json",
+ property_purchase_targets.payload(),
+ )
+ build_kwargs["property_purchase_targets"] = property_purchase_targets
+ implementations, _ = _build_implementations(**build_kwargs)
prefix = stages[: stage_names.index("cgt_residential_split")]
prefix_names = {stage.stage for stage in prefix}
after_redraw = _run_legacy_plan(
@@ -2162,6 +2294,7 @@ def generate(output: Path) -> None:
"cgt_distribution": "cgt_distribution.json",
"cgt_asset_type_facts": "cgt_asset_type_facts.json",
"property_rental_facts": "property_rental_facts.json",
+ "property_purchase_targets": "property_purchase_targets.json",
},
"cgt_parameters": cgt_parameters.__dict__,
"cgt_badr_parameters": cgt_badr_parameters.__dict__,
@@ -2192,12 +2325,55 @@ def generate(output: Path) -> None:
def _parse_args(argv: Iterable[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--output", type=Path, default=_DEFAULT_OUTPUT)
+ parser.add_argument(
+ "--check",
+ action="store_true",
+ help=(
+ "regenerate into a temporary directory and fail if any file differs "
+ "from, or is missing in, --output"
+ ),
+ )
return parser.parse_args(argv)
+def _differing_files(generated: Path, committed: Path) -> list[str]:
+ """The relative paths whose bytes differ, or which one side lacks."""
+
+ def files(root: Path) -> dict[str, Path]:
+ return {
+ path.relative_to(root).as_posix(): path
+ for path in root.rglob("*")
+ if path.is_file()
+ }
+
+ new, old = files(generated), files(committed)
+ return sorted(
+ path
+ for path in new.keys() | old.keys()
+ if path not in new
+ or path not in old
+ or new[path].read_bytes() != old[path].read_bytes()
+ )
+
+
def main(argv: Iterable[str] | None = None) -> int:
args = _parse_args(argv)
- generate(args.output.resolve())
+ output = args.output.resolve()
+ if not args.check:
+ generate(output)
+ return 0
+ # The fixture does not depend on where it is written, so a fresh copy in a
+ # scratch directory must equal the committed one byte for byte.
+ with tempfile.TemporaryDirectory() as scratch:
+ generated = Path(scratch) / output.name
+ generate(generated)
+ differing = _differing_files(generated, output)
+ for path in differing:
+ print(f"differs: {path}")
+ if differing:
+ print(f"{len(differing)} file(s) differ from {output}")
+ return 1
+ print(f"{output} regenerates byte-identically")
return 0
diff --git a/uv.lock b/uv.lock
index 96d3bd21b..dc7cbbc95 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.132.6" },
+ { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.134.4" },
{ 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.132.6" },
+ { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.134.4" },
{ name = "policyengine-us", marker = "extra == 'us'", specifier = ">=2.2.1,<3" },
]
provides-extras = ["us", "uk"]
@@ -1051,7 +1051,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.132.6" },
+ { name = "policyengine-uk", marker = "extra == 'uk'", specifier = ">=2.134.4" },
{ name = "policyengine-us", marker = "extra == 'policyengine'", specifier = ">=2.2.1,<3" },
{ name = "tables", marker = "extra == 'axiom'", specifier = ">=3" },
]
@@ -1671,7 +1671,7 @@ wheels = [
[[package]]
name = "policyengine-uk"
-version = "2.132.6"
+version = "2.134.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "microdf-python" },
@@ -1679,9 +1679,9 @@ dependencies = [
{ name = "pydantic" },
{ name = "tables" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/3f/88/bc06328a739b335d4ef5f2d07fd36cc6a3a5e0f6ec1b2c774a14e77e43a3/policyengine_uk-2.132.6.tar.gz", hash = "sha256:f9ce261d9881eee32fab96341c7080cd0c86717b40785b5cdaff44b07262a771", size = 2560464, upload-time = "2026-10-15T10:08:14.263Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/79/f3/f31485e455c543371b50c29486d658f9f95d2c47f73db311dd8fdc67f394/policyengine_uk-2.134.4.tar.gz", hash = "sha256:2c4fdbe62e3c84681f39d658b2194b4df9fd6cbedf474f169a553c63c4293a79", size = 2604960, upload-time = "2026-10-16T09:18:16.301Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/11/f2/c003cd7a95cb499737a5b8af0d619ba4e759c8bc7e55a2bb5c7efa46abd1/policyengine_uk-2.132.6-py3-none-any.whl", hash = "sha256:cc54025f2a3bc54be4f8d024d1e6f11ed29fed75ca513b214f2d2963c5bf4354", size = 3882707, upload-time = "2026-10-15T10:08:11.572Z" },
+ { url = "https://files.pythonhosted.org/packages/49/f8/4d09f4986ff929d53c0d8fc5400ee7a5cc79ea60aca73a626b3938fd1288/policyengine_uk-2.134.4-py3-none-any.whl", hash = "sha256:0df7a10dd89cd5604b78c9ed7ffebade27ab621275a4a6dd6d19d789e17dffa9", size = 3935778, upload-time = "2026-10-16T09:18:14.198Z" },
]
[[package]]